微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当文本在括号中时,用于添加超链接的 Smarty 修饰符不起作用

我正在使用 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\#$%&~/.\-;:=,"\\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\#$%&~\/.\-;:=,?@\[\]+]*)\)?   

使用 url 在 regex101.com 上测试正则表达式 (www.example.com/test/test.html)

collection group2 -> 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#$%&~/.-;:=,?@[]+ ]*)(?#is","\1\2",$ret);

说明:我添加了

\)? 

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。