Php Slugifiy 函数返回的值在 2 台服务器中是不同的



这是我slugify函数:

function slugify($text) {
$text = preg_replace('~[^\pLd]+~u', '-', $text);
$text = trim($text, '-');
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
$text = mb_strtolower($text, 'UTF-8');
$text = preg_replace('~[^-w]+~', '', $text);
if(empty($text)) return 'n-a';
return $text;
}

这是测试:

echo slugify("españa");

在我的开发服务器中,结果是:

  • 西班牙

在我的生产服务器中,结果是:

  • 西班牙经社

我确定它与字符集编码有关,但两台服务器都UTF-8default_charset。我还能错过什么?有什么想法吗?

问题来自iconv函数。 在文档的注释中,我们可以看到:

请注意,当区域设置类别LC_CTYPE设置为 C 或 POSIX 时,iconv('UTF-8', 'ASCII//TRANSLIT', ...( 无法正常工作。您必须选择其他区域设置,否则所有非 ASCII 字符都将替换为问号。

最新更新