V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
liyandong
V2EX  ›  问与答

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

  •  
  •   liyandong · 2012-03-09 10:12:31 +08:00 · 3649 次点击
    这是一个创建于 4428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [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有木有好方法?
    4 条回复    1970-01-01 08:00:00 +08:00
    lizheming
        1
    lizheming  
       2012-03-09 10:20:51 +08:00
    我搅得直接匹配头尾不就挺好的么?干嘛需要这么麻烦啊……
    liyandong
        2
    liyandong  
    OP
       2012-03-09 10:27:15 +08:00
    @lizheming 如何匹配?
    liyandong
        3
    liyandong  
    OP
       2012-03-09 10:49:37 +08:00
    唉唉。还是用笨方法把。。。[A-Za-z0-9\/\-_+=.~!%@?#%&;:$\\()\[\]\.\x80-\xff|]+
    lizheming
        4
    lizheming  
       2012-03-09 11:06:25 +08:00
    @liyandong 唔,我的理解就是中间中(.*?)替代了,前面和后面跟你差不多,匹配https|http。。。还有.com|.net|.org|.me什么什么的...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2936 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:14 · PVG 23:14 · LAX 08:14 · JFK 11:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.