有很多类似的问题,但我尝试了大约15个不同的preg_match示例,但都没有完全工作。将www或http开头的多个文本网址转换为绝对链接
我有很多用户提交的内容,其中大部分都有url ..有时以http://www.site.com/page的形式,有时像www.site.com,并且经常包含在括号内(www.site.com/page.html) 。
我没有找到一种模式来解析一个字符串,并将所有这些转换为绝对html链接。想知道是否有人可以帮助我。我发现了几个正则表达式,似乎他们会工作,但我不知道如何正确转换为绝对html链接,当有一些与http和一些没有...
这里有几个表达式,我曾尝试:
function makeLinks($text) {
$text = preg_replace('(((f|ht){1}tp://)[[email protected]:%_\+.~#?&//=]+)',
'(<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;
}
很抱歉,但也许有些样品代码将有助于解释你正在努力达到的目标。就像你之前的代码一样,你说你试过了。 – burntblark 2011-02-28 07:54:06
以www或http开头的网址是绝对链接。我不确定你想要完成什么。现在,没有http://的地址可能不会被正确解释(由古老的/破碎的浏览器),但无论这些都是绝对链接,添加“http://”的正则表达式将是微不足道的。再一次,我不明白你的问题。你能否详细说明一下? – rockerest 2011-02-28 08:17:43
或者,也许你想从你的网址中删除域名+协议 – burntblark 2011-02-28 09:42:05