如何将包含Unicode字符的URL转换为可点击的链接?

时间:2010-08-05 10:01:54

标签: php regex url

我使用此函数将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;

}

如何解决这个问题?

2 个答案:

答案 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)

尝试使用\ p {L}代替a-zA-Z和\ p {Ll}而不是a-z

您可以在正则表达式here

中找到unicode处理的详细信息

养成使用preg函数而不是弃用的ereg函数的习惯