有许多类似的问题,但我尝试了大约15个不同的preg_match示例,但没有一个完全正常工作。
我有很多用户提交的内容,其中大部分都有网址..有时采用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://)[-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;
}
答案 0 :(得分:2)
我最终使用了这个字符串,似乎在所有必要的情况下都表现良好:
function makeLinks($text) {
$text = preg_replace('%(((f|ht){1}tp://)[-a-zA-^Z0-9@:\%_\+.~#?&//=]+)%i',
'<a href="\\1">\\1</a>', $text);
$text = preg_replace('%([[:space:]()[{}])(www.[-a-zA-Z0-9@:\%_\+.~#?&//=]+)%i',
'\\1<a href="http://\\2">\\2</a>', $text);
return $text;
}
答案 1 :(得分:0)
这是一个好的开始:
function makeLinks($text) {
$text = preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $text);
return $text;
}
$ 0是完全匹配。如果您只对没有http://
或www.
或http://www.
的部分进行分组,则可以将其连接到前面。
如果您仍在寻找答案,请尝试此操作:
function makeLinks($text) {
$text = preg_replace('~(?:http://|)(?:www\.|)(\S+)~', '<a href="http://www.$1">$0</a>', $text);
return $text
}