这是我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-8
default_charset
。我还能错过什么?有什么想法吗?
问题来自iconv
函数。 在文档的注释中,我们可以看到:
请注意,当区域设置类别LC_CTYPE设置为 C 或 POSIX 时,iconv('UTF-8', 'ASCII//TRANSLIT', ...( 无法正常工作。您必须选择其他区域设置,否则所有非 ASCII 字符都将替换为问号。