0

不起作用,调用函数时 $1-value 丢失:

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);

我需要从 preg_replace 中将 $1 值发送到函数。我究竟做错了什么?

4

2 回答 2

2

您需要设置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)
于 2009-12-20T16:31:52.217 回答
2

你在找php_replace_callback()吗?

使用回调执行正则表达式搜索和替换

于 2009-12-20T16:31:53.380 回答