段落中匹配url,并转换成可点击的URL,各位有什么好的方法吗?

给定某一段文字,文字中含有URL,如何将URL提取出来,并替换成可点击的文案。

举例:

某文案:

欢迎来到http://www.baidu.com/aaa/bbb,多谢指教!

转换后文案:

欢迎来到<a href='http://www.baidu.com/aaa/bbb'>http://www.baidu.com/aaa/bbb</a>,多谢指教!

大家有什么好的想法吗

阅读 3.2k
3 个回答
 $str='欢迎来到http://www.baidu.com/aaa/bbb,多谢指教!欢迎来到http://www.baidu.com/aaa/bbb,多谢指教!';
        preg_match_all('/http(s)?:\/\/[(a-zA-Z0-9\/\.\-\_\?\&\=)]*/',$str,$match);
        foreach($match[0] as $value){
            $strReplace='<a href=\''.$value.'\'>'.$value."</a>";
            $str=str_replace($strReplace,$value,$str);//文本中存在重复的url 且进行了一次替换的时候把先前的替换回来重新替换一次
            $str=str_replace($value,$strReplace,$str);
        }
        echo $str;
        

这样子应该可以满足你的要求替换成超链

正则匹配转换了

找了个还阔以的正则,哈哈,
本人通过修改这个大神写的正则,来符合我们中文习惯的国情,就是加个URL中不能包括中文,有需要可以借鉴。

 $pattern = '#(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>\x7f-\xff]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>\x7f-\xff]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’])[^\x7f-\xff])#';
 
 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题