当文本在括号中时,添加超链接的智能修饰符不起作用



我使用Smarty修饰符将明文链接转换为正确的超链接,我为此使用Smarty修改器,因为它适用于使用用户内容的网站,其中只允许某些区域具有超链接。

这是修改器:

function smarty_modifier_dolink($text)
{
$text = preg_replace('#(script|about|applet|activex|chrome):#is', "\1:", $text);
$ret = ' ' . $text;
$ret = preg_replace("#(^|[n ])([w]+?://[w#$%&~/.-;:=,?@[]+]*)#is", "\1<a href="\2" target="_blank" rel="nofollow">\2</a>", $ret);
$ret = preg_replace("#(^|[n ])((www|ftp).[w#$%&~/.-;:=,?@[]+]*)#is", "\1<a href="http://\2" target="_blank" rel="nofollow">\2</a>", $ret);
//$ret = preg_replace("#(^|[n ])([a-z0-9&-_.]+?)@([w-]+.([w-.]+.)*[w]+)#i", "\1<a href="mailto:\2@\3">\2@\3</a>", $ret);
$ret = substr($ret, 1);
return $ret;
}
?>

修改器的代码已在另一个网站上共享。它工作正常,但当明文链接在括号中时不起作用,如果有任何帮助,我们将不胜感激,谢谢!

一个提取的PCRE正则表达式:

(^|[n ])(?((www|ftp).[w#$%&~/.-;:=,?@[]+]*))?   

regex在带有url的regex101.com上测试(www.example.com/test/test.html(

集合组2->www.example.com/test/test.html

因此,以下内容应该有效:

$ret = preg_replace("#(^|[n ])(?((www|ftp).[w#$%&~/.-;:=,?@[]+]*))?#is", "\1<a href="http://\2" target="_blank" rel="nofollow">\2</a>", $ret);

$ret=preg_replace("#(^|[\n]((?([\w]+?://[\w#$%&~/.-;:=,?@[]+]*((?#是","\1<a href="\2&"target="_blank&"rel="nofollow">\2&;,$ret(;

说明:我添加了

)? 
/) for a bracket and ? for optional  at the positions where i suggested your brackets to be.   

相关内容

  • 没有找到相关文章

最新更新