【发布时间】:2013-10-30 20:52:03
【问题描述】:
使用以下代码将邮件中的 URL 转换为 HTML 链接:
$message = preg_replace("#(http|https|ftp|ftps)://([.]?[&;%=a-zA-Z0-9_/?-])*#",
"<a href=\"away?to=\\0\" target=\"_blank\">\\0</a>", $message);
$message = preg_replace("#(^| |\n)(www([.]?[&;%=a-zA-Z0-9_/?-])*)#",
"\\1<a href=\"away?to=http://\\2\" target=\"_blank\">\\2</a>", $message);
它几乎适用于所有链接,但以下情况除外:
1) http://example.com/mediathek#/video/1976914/zoom:-World-Wide
这里的问题是链接中的# 和:,因为没有转换完整的链接。
2) If someone just writes "www" in a message
示例:<a href="http://www">www</a>
那么问题是是否有任何方法可以解决上述代码中的这两种情况?
【问题讨论】:
-
你永远找不到匹配所有 url 的正则表达式,并且只匹配 url。有太多不同的选择。话虽如此,在网上寻找一个好的可能会更快。
-
@hek2mgl:不,不需要完整的其他功能,只需修复上面的代码即可。
-
@Chevi:我不是想找到一个匹配所有 url 的正则表达式,但我确信上面的代码可以很容易地扩展到这两种情况。
标签: php url preg-replace