我有一个函数可以在超链接中转换'www.example.com'和'http://example.com'等字符串。它还涉及子域,例如'http://sub.example.com'。
但它失败了 - http://www .example.com'并输出以下内容
<a href="http://<a href="http://www.chemica.ru">www.chemica.ru</a>">http://<a href="http://www.chemica.ru">www.chemica.ru</a></a>
拜托,有人可以帮忙吗?问题是'http://'和'www。'在一起,两者都有不同的转换方式。
function makeLinks($text){
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '<a href="\\1">\\1</a>', $text);
$text = eregi_replace('(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '<a href="http://\\1">\\1</a>', $text);
$text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', '<a href="mailto:\\1">\\1</a>', $text);
return $text;
}
答案 0 :(得分:4)
只需写入您的视图页面(您不需要任何库或辅助函数):
$text = "Good Site is http://masalahkita.com";
$link = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>", $text);
echo $link;
答案 1 :(得分:2)
您可能需要阅读this blog post by Jan Goyvaerts,了解有关如何在文本中查找网址的一些想法。
要解决您的直接问题,您可以为第二个正则表达式添加一个负面的lookbehind:(?<!http://)(www.[-a-zA-Z0-9@:%_\+.~#?&/=]+)
确保www...
只有在http://
之前没有匹配时才会匹配。
但是,ereg
函数已弃用且不支持环视,因此您需要使用preg_replace()
。
$text = preg_replace('/(?<!http:\/\/)(www.[-a-zA-Z0-9@:%_\+.~#?&\/=]+)/i', '<a href="http://\1">\1</a>', $text);
应该有用。
答案 2 :(得分:0)
对于'http://'
和'www.'
一起,您可以执行this之类的操作:
$text = "http://www.example.com is a nice site";
$link = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>", $text);
echo $link;
适用于网址的工作以 http://
开头