PHP:使用 usort 对字母进行排序或从 UTF-8 字符串排序会导致未知字符


PHP: Sorting letters using usort or sort from an UTF-8 string causes unknown characters

我正在尝试按字母顺序对 UTF-8 字符串进行排序。结果包含未知字符,我不知道为什么。同样的事情也发生在 usort 和 sort 上。

setlocale(LC_COLLATE, 'ro_RO.UTF-8');
$word = 'ÎABAȚÂIEȘĂ';
$chars = str_split($word);
echo 'Word: ' . $word . "'n";
//sort($chars, SORT_LOCALE_STRING);
usort($chars, function($a, $b){
    echo 'Comparing: ' . $a . ' and ' . $b . "'n";
    return strcoll($a, $b);
});
echo 'Result: ' . implode($chars) . "'n";

命令行示例:http://s18.postimg.org/avqfhetsp/test.gif

问题不是由比较和/或排序引起的,而是由str_split()函数引起的。由于此函数的多字节版本不存在,因此应改用 mb_split()preg_split() 来实现此目的。