我使用此函数将URL设置为可点击链接,但问题是当URL中有一些Unicode字符时,它只会在该字符之前成为可点击链接...
功能:
function clickable($text) {
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'<a class="und" href="\\1">\\1</a>', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
'\\1<a href="http://\\2">\\2</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 :(得分:1)
首先,不要使用eregi_replace
。我不认为可以将它与unicode一起使用 - 而且它已经从php 5.3中折旧了。使用preg_replace
。
然后你可以尝试类似的东西
preg_replace("/(https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#]*(\?\S+)?)?)?/u", '<a href="$0">$0</a>
编辑 - 更新表达式以包含#character
答案 1 :(得分:0)