【发布时间】:2011-07-05 14:07:43
【问题描述】:
有很多类似的问题,但我已经尝试了大约 15 个不同的 preg_match 示例,但没有一个完全有效。
我有很多用户提交的内容,其中大部分都有 url.. 有时以 http://www.site.com/page 的形式,有时像 www.site.com 并且经常包含在括号中 (www.site.com/page.html )。
我没有找到一种能够解析字符串并将所有这些转换为绝对 html 链接的模式。想知道是否有人可以帮助我。我发现了一些正则表达式,它们似乎可以工作,但是当有些带有 http 而有些没有...时,我不知道如何正确转换为绝对 html 链接...
以下是我尝试过的几个表达方式:
function makeLinks($text) {
$text = preg_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'(<a href="\\1">\\1</a>)', $text);
$text = preg_replace('(www\.[a-zA-Z0-9\-]\.[^ ]+)',
'(<a href="\\1">\\1</a>)', $text);
return $text;
}
function makeLinks($text) {
$text = preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $text);
return $text;
}
function makeLinks($text) {
$text = preg_replace( '@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="\0" target="_blank">\0</a>', $text );
return $text;
}
【问题讨论】:
-
对不起,但也许一些示例代码将有助于解释您正在尝试实现的目标。就像您之前说您尝试过的代码一样。
-
以 www 或 http 开头的 URL 是绝对链接。我不确定你想要完成什么。现在,没有 http:// 的地址可能无法正确解释(由古老/损坏的浏览器),但无论如何,这些都是绝对链接,添加“http://”的正则表达式将是微不足道的。再说一次,我不明白你的问题。能详细点吗?
-
或者您可能想从您的 URL 中删除域名 + 协议
-
为什么它必须是一个正则表达式解决方案?