0

这是我的slugify功能:

function slugify($text) {
    $text = preg_replace('~[^\\pL\d]+~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-8as default_charset。我还能错过什么?有任何想法吗?

4

1 回答 1

3

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

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

于 2018-06-15T03:10:21.760 回答