使用正则表达式将字符串中的链接转换为非拉丁字符

时间:2012-10-30 20:33:14

标签: php regex

我正在使用此函数查找字符串中的链接并将其转换为html链接

function makeClickableLinks($s) {
  return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}

问题是它没有使用像这样的非拉丁字符的网址 https://www.facebook.com/pages/Celebração/123434584839

结果是 https://www.facebook.com/pages/Celebra��ão/123434584839

任何帮助?

2 个答案:

答案 0 :(得分:1)

尝试使用正则表达式

(?:(^)|(?<=(.)))((?<!^)https?://.*?(?=\1)|https?://.*?(?=\s|$))

$2

中有网址

答案 1 :(得分:0)

要匹配拉丁字符,您应该使用unicode friendly regex。这样的事情应该有效:

@(https?://([-\pL\.]+[-\pL])+(:\pN+)?(/([\pL/_\.#-]*(\?\S+)?[^\.\s])?)?)@u