Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSX/FreeBSD上的PHP setlocale不起作用_Php_Macos_Sorting_Locale_Freebsd - Fatal编程技术网

OSX/FreeBSD上的PHP setlocale不起作用

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

我在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(
    '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);