从纯文本创建超链接

时间:2011-03-05 14:27:27

标签: php regex

我使用此代码制作纯文本超链接。

 $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', 
    '<a target="_blank" href="\\1">\\1</a>', $text); 
      $text = eregi_replace('(((f|ht){1}tps://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)', 
    '<a target="_blank" href="\\1">\\1</a>', $text); 
  $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', 
    '\\1<a target="_blank" href="http://\\2">\\2</a>', $text); 
  $text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})', 
    '<a target="_blank" href="mailto:\\1">\\1</a>', $text); 

但是当文字是www.domain.com或domain.com或subdomain.domain.com时,它不起作用

我如何让它与它们一起使用?

由于

2 个答案:

答案 0 :(得分:1)

这个问题有很多重复,这使得找到合适的问题变得更加困难。改为接受此列表:

但是既然你已经拥有了一些你认为适合自己的东西,那么就可以选择添加边缘情况。找sub.domain.com并不容易,可能会导致误报。但是将它们转换为http:// urls以便其他规则可以通过首先应用它们来实现:

$text = preg_replace('#(?<!://)w+\.\w+\.(com|net|org|\w\w)\b\S*#', "http://$0", $text);
$text = preg_replace('#(?<!://)www\.\S+#', "http://$0", $text);

而不是\S你可以使用冗长的角色类。

答案 1 :(得分:0)