Эта тема на forum.dklab.ru


Andrej: помогите правильно выражение составить
собственно вот:
$content= preg_replace('%(<a[^>]+href\s*=\s*)(?:(?:"([^"]*)")|(?:\'([^\']*)\'))%i', '$1"go.php?$2$3" target="_blank"', $content); # Добавление go.php в УРЛ в тексте

проверяет текст, если в нем находит URL, то добавляет перед URL мой домен, для редиректа через скрипт. Нужно чтобы на сайте небыло прямых URL, только чтобы через редирект

например, если в строке есть урл <A HREF="http://www.site.com">test URL</A> то он заменяется на <A HREF="http://www.site.com/go.php?http://www.site.com">test URL</A>

Собственно, все прекрасно работает, но если попадается URL без ковычек в теге, тоесть <A HREF=http://www.site.com>test URL</A>, то нужная замена не происходит...

Заранее благодарен. У самого знаний никак не хватает...
WingedFox:
Сложности-то какие...
Жыззь куда проще

$content= preg_replace_callback('%(<a[^>]+href\s*=\s*)([^\s]+)%i'
,create_function('$a',' return $a[1]."\"http://mysite.com?go.php=".urlencode(trim($a[2],"\'\""))."\"";')
,$content); # Добавление go.php в УРЛ в тексте

Andrej:
Сложности-то какие...
Жыззь куда проще

$content= preg_replace_callback('%(<a[^>]+href\s*=\s*)([^\s]+)%i'
,create_function('$a',' return $a[1]."\"http://mysite.com?go.php=".urlencode(trim($a[2],"\'\""))."\"";')
,$content); # Добавление go.php в УРЛ в тексте



и так и эдок пробую, никак не получается... урлы с кавычками работают, а без ковычек просто вообще не появляются
WingedFox:
Andrej
Вы хоть запускали пример?
Andrej:
WingedFox
Andrej
Вы хоть запускали пример?

да, конечно. но траблы... url которые с содержат кавычки, типа <A HREF="http://www.site.com">test URL</A> работают как и положено.
а без кавычек типа <A HREF=http://www.site.com>test URL</A>,

их вообще не видно... не то, что скрипт не срабатывает, когда кавычек нет как раньше, а вообще URL исчезает...

немного поразбирался, но предложили другой вариант:

$content= preg_replace('#<a(.*)href=["\']?([^\s>"\']+?)["\']?([^>]*)>#isU', '<a$1href="go.php?$2" $3 target="_blank">', $content);

сразу заработало...

Эта тема на forum.dklab.ru