2016年3月

这几天在搞一个网站,里面涉及到对一些数据进行排序显示的问题。后来做完之后自己用着发现因为默认是按英文排序的,当语言是中文的时候要找一个项特别麻烦。那么问题就来了,中文要怎么样才能按照用户习惯的顺序来排序呢(中国大陆来说,就是拼音排序)?

经过一番百度Google,找到的资料要么就是转成GB2312然后排序,要么就是查表之类的,费劲又不安全(转码的时候可能会有意外字符导致失败之类的,而且GB2312并不完全是按拼音排序的;查表的话数据的正确性难以有保障)。作为一个对代码正确性要求很高的人,这显然不符合我的风格。

然后我突然想到了万能的UnicodeUnicode并不只是单纯的一个编码系统,而是有关语言文字的很多内容的一整套完整的编码、属性体系。我这个项目里面用到的翻译部分就是使用了PHP的intl扩展,而这个扩展是基于ICU这个项目实现的,而ICU又是基于Unicode组织提供的CLDR数据开发的一套完整的国际化解决方案。CLDR,全称叫做Unicode Common Locale Data Repository,是Unicode组织提供的一套基本的语言相关的数据,包含了日期时间货币数字格式等等东西,也包含了排序规则,这就是本文要用到的东西。

阅读全文