php - 段落中匹配url,并转换成可点击的URL,各位有什么好的方法吗?
PHPz
PHPz 2017-04-11 09:49:27
[PHP讨论组]

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

举例:

某文案:

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

转换后文案:

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

大家有什么好的想法吗

PHPz
PHPz

学习是最好的投资!

全部回复(3)
PHP中文网
 $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;
        

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

PHPz

正则匹配转换了

PHPz

找了个还阔以的正则,哈哈,
本人通过修改这个大神写的正则,来符合我们中文习惯的国情,就是加个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])#';
 
 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号