Проблема с вызовом функции внутри preg_replace - PullRequest
0 голосов
/ 20 декабря 2009

Не работает, значение $ 1 теряется при вызове функции:

echo preg_replace('"\b(http://\S+)"', '<a href="$1">'.findTopDomain('$1').'</a>', $text);

Работает нормально, вывод: stackoverflow.com

echo preg_replace('"\b(http://\S+)"', '<a href="$1">'.findTopDomain('http://stackoverflow.com/questions/ask').'</a>' , $text);

Мне нужно отправить значение $ 1 в функцию из preg_replace. Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2009

Вы ищете php_replace_callback()?

Выполнить поиск по регулярному выражению и заменить его с помощью обратного вызова

2 голосов
/ 20 декабря 2009

Вам необходимо установить модификатор e , чтобы иметь выражение для подстановки, которое будет выполнено:

preg_replace('"\b(http://\S+)"e', '"<a href=\\"$1\\">".findTopDomain("$1")."</a>"', $text)

Обратите внимание, что ваша замена теперь должна быть допустимым выражением PHP. В этом случае выражение будет оценено как:

"<a href=\"$1\">".findTopDomain("$1")."</a>"

И не забудьте выйти из выхода, набрав хотя бы htmlspecialchars:

preg_replace('"\b(http://\S+)"e', '"<a href=\\"".htmlspecialchars("$1")."\\">".htmlspecialchars(findTopDomain("$1"))."</a>"', $text)
...