我使用此代码制作纯文本超链接。
$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时,它不起作用
我如何让它与它们一起使用?
由于
答案 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)