помогите в php

J
На сайте с 18.10.2007
Offline
14
628

необходимо убивать все внешние линки, не принадлежащие моему домену.

$link='мойсайт.ком';

$text = preg_replace('#(<a href='http://все что не=$link)(.*?)(<\/a>)#is', '', $text );

как это правильно будет выглядеть?

[Удален]
#1

Если у вас внутренние ссылки относительные, то достаточно искать http

$text = preg_replace('#(<a href="http)(.*?)(<\/a>)#is', '', $text );
J
На сайте с 18.10.2007
Offline
14
#2

в том то и дело, что все абсолютные...

edogs software
На сайте с 15.12.2005
Offline
775
#3

На регах это "в лоб" не сделаешь, там конструкции "все что не" как таковой нету.

Варианта 2.

1) Сначала заменяете свои ссылки на нечто не подходящее под маску (например http на abazaba), потом убиваете все оставшиеся активные сыслки, потом воскрешаете свои ссылки посредством обратной замены.

2) Используете preg_replace_callback и свою функцию для более интеллектуальных выводов о том, что на что менять или нет.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Лёлик
На сайте с 28.04.2006
Offline
54
#4

Все не так сложно :)

$domain = 'google.com';
$text = preg_replace("/<a href=['\"]?http:\/\/(?!$domain|\w+\.$domain)[^>]*>.*?<\/a>/is",'',$text);
J
На сайте с 18.10.2007
Offline
14
#5

последний вариант работает, если ссылки вида <a href= ... но не работает если <a class="navbar" href= ....

Коля Дубр
На сайте с 02.03.2005
Offline
153
#6


$domain = 'google.com';
$text = preg_replace("/<a[^>]+href=['\"]?http:\/\/(?!$domain|\w+\.$domain)[^>]*>.*?<\/a>/is",'',$text);

Так?

Но с preg_replace_callback кошерней :)\

P.S. Ура!! Тысячный пост :)

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
Лёлик
На сайте с 28.04.2006
Offline
54
#7
Коля Дубр:

Но с preg_replace_callback кошерней :)\

От чего ж кошерней ? :)

Jeck
На сайте с 20.07.2006
Offline
82
#8

C callback вот так :

<?
function replaceurl($match) {
global $domain;
$url = @parse_url($match[2]);
if (strpos($match[2],"http://") === 0 && @$url['host'] != $domain) {
return str_replace($match[2],"http://".$domain."/info.php?url=".urlencode($match[2]),$match[0]);
} else {
return $match[0];
}
}

$domain = $_SERVER['HTTP_HOST'];
$content = preg_replace_callback("#<\s*a\s.*?href\s*=\s*([\"\'])?(?(1) (.*?)\\1 | ([^\s\>]+))#isx","replaceurl",$content);
?>
Мой блог (http://jeck.ru)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий