PHP的通用排序功能,没有Locale麻烦

时间:2010-01-12 06:53:49

标签: php sorting utf-8 internationalization localization

前一段时间我问a very similar question,我想知道如果使用UTF-8字符正确排序数组,使用PHP 5.3 +的新改进会更容易一些。

我上一个问题中提供的解决方案有效,但我正在寻找通用的解决方案;一个不依赖于指定语言环境的语言 - MySQL对UTF-8整理的作用

提前致谢!

2 个答案:

答案 0 :(得分:3)

简短回答是:您需要了解区域设置。

不要将charset与区域设置排序规则混淆。 UTF-8只是一种编码Unicode字符的方法:它并不意味着你如何处理排序,大写等等。

我将举一个简单的例子。西班牙语有两种排序:传统(其中“ch”被认为是一个字母)和现代(其中“ch”是两个字母)。在传统的排序规则中,您可以这样排序:

  1. 巴罗
  2. Cuenco
  3. 中国
  4. 墙裙
  5. 在现代整理中你会这样排序:

    1. 巴罗
    2. 中国
    3. Cuenco
    4. 墙裙
    5. 这与UTF-8,Latin1,Latin9,cp850或其他相同:编码无关。

答案 1 :(得分:1)

PHP中的语言环境问题是它们不是线程安全的。如果你运行Apache线程,你实际上不能使用setlocale,因为它会影响所有线程。

现在,我刚刚找到了解决方案: Intl扩展程序中的Collator类。它有字符串比较和排序的方法。文件在这里: http://php.net/manual/en/class.collator.php