栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何对UTF-8字符串数组进行排序?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何对UTF-8字符串数组进行排序?

最终,由于Huppie发现了明显的PHP错误,因此如果不使用ΤζΩΤΙΙΙΟΥ所建议的不使用重新编码的字符串(UTF-8→Windows-1252或ISO-8859-1),就无法以简单的方式解决此问题。总结问题,我创建了以下代码段,清楚地说明了问题是使用65001
Windows-UTF-8代码页时的strcoll()函数。

function traceStrColl($a, $b) {    $outValue=strcoll($a, $b);    echo "$a $b $outValuern";    return $outValue;}$locale=(defined('PHP_OS') && stristr(PHP_OS, 'win')) ? 'German_Germany.65001' : 'de_DE.utf8';$string="ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöüß";$array=array();for ($i=0; $i<mb_strlen($string, 'UTF-8'); $i++) {    $array[]=mb_substr($string, $i, 1, 'UTF-8');}$oldLocale=setlocale(LC_COLLATE, "0");var_dump(setlocale(LC_COLLATE, $locale));usort($array, 'traceStrColl');setlocale(LC_COLLATE, $oldLocale);var_dump($array);

结果是:

string(20) "German_Germany.65001"a B 2147483647[...]array(59) {  [0]=>  string(1) "c"  [1]=>  string(1) "B"  [2]=>  string(1) "s"  [3]=>  string(1) "C"  [4]=>  string(1) "k"  [5]=>  string(1) "D"  [6]=>  string(2) "ä"  [7]=>  string(1) "E"  [8]=>  string(1) "g"  [...]

相同代码段可在Linux机器上运行,而不会产生以下输出问题:

string(10) "de_DE.utf8"a B -1[...]array(59) {  [0]=>  string(1) "a"  [1]=>  string(1) "A"  [2]=>  string(2) "ä"  [3]=>  string(2) "Ä"  [4]=>  string(1) "b"  [5]=>  string(1) "B"  [6]=>  string(1) "c"  [7]=>  string(1) "C"  [...]

当使用Windows-1252(ISO-8859-1)编码的字符串(当然mb_ *编码和语言环境必须更改)时,该代码段也可以使用。

我在bugs.php.net上提交了错误报告:错误#46165
strcoll()在Windows上不适用于UTF-8字符串
。如果您遇到相同的问题,则可以在错误报告页面上向PHP团队提供反馈(另外两个可能相关的错误被归类为
伪造 -我认为此错误不是 伪造的 ;-)。

感谢大家。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430454.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号