给定某一段文字,文字中含有URL,如何将URL提取出来,并替换成可点击的文案。
举例:
某文案:
欢迎来到http://www.baidu.com/aaa/bbb,多谢指教!
转换后文案:
欢迎来到<a href='http://www.baidu.com/aaa/bbb'>http://www.baidu.com/aaa/bbb</a>,多谢指教!
大家有什么好的想法吗
正则匹配转换了
$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])#';