【发布时间】:2012-03-15 17:03:36
【问题描述】:
我正在使用以下代码在文本中添加指向 url 的链接...
if (preg_match_all("#((http(s?)://)|www\.)?([a-zA-Z0-9\-\.])(\w+[^\s\)\<]+)#i", $str, $matches))
{
?><pre><?php
print_r($matches);
?></pre><?php
for ($i = 0; $i < count($matches[0]); $i++)
{
$url = $matches[0][$i];
$parsed = parse_url($url);
$prefix = '';
if (!isset($parsed["scheme"])){
$prefix = 'http://';
}
$url = $prefix.$url;
$replace = '<a href="'.$url.'" class="auto_link_color">'.$matches[0][$i].'</a>';
$str = str_replace($matches[0][$i], '<a href="'.$prefix.$matches[0][$i].'" class="auto_link_color">'.$matches[0][$i].'</a>', $str);
}
}
当我在任何地方在文本中输入两次相同的 url 时,问题就出现了。
例如。
google.com text text google.com
它会在第一个链接上添加一个链接,然后搜索链接内的 google.com 并尝试在其中再次添加..
我如何确保它会单独添加链接而不会出现问题?
【问题讨论】:
-
你需要匹配完整的链接。
-
你可以看看我对Converting text to link的回答。
-
@rodneyrehm 我试过你的代码,但即使我输入简单的文本,它也会首先尝试添加 http://
-
嗯,是的,当然。没有协议 (http://) 的链接将有一个相对于当前域的浏览器请求。这不是你想要的,所以我的替换功能会为你解决这个问题。
-
它现在似乎可以工作了,另一个问题是它不适用于像 google.com google.fr 这样的文本...如何编辑您的正则表达式以使用没有 www 或 http 的网址第一?
标签: php regex hyperlink str-replace