OSX/FreeBSD上的PHP setlocale不起作用
我在FreeBSD/OSX上遇到了按区域设置排序结果的问题。下面是在linux上正常工作的代码OSX/FreeBSD上的PHP setlocale不起作用,php,macos,sorting,locale,freebsd,Php,Macos,Sorting,Locale,Freebsd,我在FreeBSD/OSX上遇到了按区域设置排序结果的问题。下面是在linux上正常工作的代码 <?php header('Content-Type: text/html; charset=utf-8'); echo "<pre>"; setlocale(LC_ALL, 'cs_CZ.UTF-8', 'Czech'); echo "Set locale: ". setlocale(LC_ALL, 0) . "\n"; $countries = array( 'Bulh
<?php
header('Content-Type: text/html; charset=utf-8');
echo "<pre>";
setlocale(LC_ALL, 'cs_CZ.UTF-8', 'Czech');
echo "Set locale: ". setlocale(LC_ALL, 0) . "\n";
$countries = array(
'Bulharsko',
'Česko',
'Polsko',
'Čína'
);
sort($countries, SORT_LOCALE_STRING);
print_r($countries);
?>
然后通过文件:
PHP 5.4.23 (cli) (built: Dec 16 2013 00:36:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
(OSX 10.9.1): Darwin MBP.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64
有趣的是,LC_在OSX中对每种语言的点进行整理,以指向同一个文件。系统信息:
$usedLocale = setlocale (LC_COLLATE, 'cs_CZ.utf8', 'cs_CZ.UTF-8', 'Czech', 'cs_CZ', 'cs');
$collator = new Collator($usedLocale);
$collator->asort($countries, SORT_LOCALE_STRING);
知道如何使用区域设置正确排序吗?使用Collator,而不是Linux/Win/Mac兼容:
你发现什么了吗?在FreeBSD 10.2和PHP5.5、5.6、7.0中也遇到了同样的问题。您应该在Collator类中使用intl扩展,这样更可靠。
PHP 5.4.23 (cli) (built: Dec 16 2013 00:36:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
(OSX 10.9.1): Darwin MBP.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64
$usedLocale = setlocale (LC_COLLATE, 'cs_CZ.utf8', 'cs_CZ.UTF-8', 'Czech', 'cs_CZ', 'cs');
$collator = new Collator($usedLocale);
$collator->asort($countries, SORT_LOCALE_STRING);