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

时间:2018-06-15 02:53:51

标签: php character-encoding preg-replace slugify

这是我的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");

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

  • 西班牙

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

  • espaa

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

1 个答案:

答案 0 :(得分:3)

问题来自iconv功能。 在comments of the documentation中,我们可以看到:

  

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