PHP的关于利用正则给URL加链接的问题

2012-03-09 10:12:31 +08:00
 liyandong
[code]
$return = preg_replace(array("/(?<=[^\]A-Za-z0-9-=\"'\\/])(https?|ftp|qqdl|thunder|bdhd|qvod|gopher|news|telnet|mms){1}:\/\/([A-Za-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)/ies","/([\n\s])www\.([a-z0-9\-]+)\.([A-Za-z0-9\/\-_+=.~!%@?#%&;:$\[\]\\()|]+)((?:[^,\t\s\n\r]*)?)/is","/(?<=[^\]A-Za-z0-9\/\-_.~?=:.])([A-Za-z0-9\-_.]+)@([A-Za-z0-9\-_][.][A-Za-z0-9\-_.]+)/is"),array("urlcut('\\1://\\2')","\\1<a href=\"http://www.\\2.\\3\\4\" target=\"_blank\">www.\\2.\\3\\4</a>","<a href=\"mailto:\\1@\\2\">\\1@\\2</a>"),$return);
echo $return;
[/code]

这个正则换下来之后中文URL就悲剧了,对含有中文的URL有木有好方法?
3658 次点击
所在节点    问与答
4 条回复
lizheming
2012-03-09 10:20:51 +08:00
我搅得直接匹配头尾不就挺好的么?干嘛需要这么麻烦啊……
liyandong
2012-03-09 10:27:15 +08:00
@lizheming 如何匹配?
liyandong
2012-03-09 10:49:37 +08:00
唉唉。还是用笨方法把。。。[A-Za-z0-9\/\-_+=.~!%@?#%&;:$\\()\[\]\.\x80-\xff|]+
lizheming
2012-03-09 11:06:25 +08:00
@liyandong 唔,我的理解就是中间中(.*?)替代了,前面和后面跟你差不多,匹配https|http。。。还有.com|.net|.org|.me什么什么的...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/29127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX