This bug only exists in PHP 5.x. The unicode support in PHP 6 takes care of it already, but I added a PHP 6 version of the test case as well.
-- Herman Radtke hermanrad...@gmail.com | http://hermanradtke.com
diff --git a/ext/standard/strnatcmp.c b/ext/standard/strnatcmp.c index 2459e46..366c124 100644 --- a/ext/standard/strnatcmp.c +++ b/ext/standard/strnatcmp.c @@ -101,7 +101,7 @@ compare_left(char const **a, char const *aend, char const **b, char const *bend) */ PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case) { - char ca, cb; + unsigned char ca, cb; char const *ap, *bp; char const *aend = a + a_len, *bend = b + b_len;
--TEST-- Bug #47481 (natcasesort() does not sort extended ASCII characters correctly) --FILE-- <?php /* Prototype : bool natcasesort(array &$array_arg) * Description: Sort an array using case-insensitive natural sort * Source code: ext/standard/array.c */ /* * Test natcasesort() with extended ASCII characters */ $array = array ('Süden', 'spielen','Sonne','Wind','Regen','Meer'); echo "\n-- Before sorting: --\n"; var_dump($array); echo "\n-- After Sorting: --\n"; var_dump(natcasesort($array)); var_dump($array); echo "Done"; ?> --EXPECTF-- -- Before sorting: -- array(6) { [0]=> string(6) "Süden" [1]=> string(7) "spielen" [2]=> string(5) "Sonne" [3]=> string(4) "Wind" [4]=> string(5) "Regen" [5]=> string(4) "Meer" } -- After Sorting: -- bool(true) array(6) { [5]=> string(4) "Meer" [4]=> string(5) "Regen" [2]=> string(5) "Sonne" [1]=> string(7) "spielen" [0]=> string(6) "Süden" [3]=> string(4) "Wind" } Done
--TEST-- Bug #47481 (natcasesort() does not sort extended ASCII characters correctly) --FILE-- <?php /* Prototype : bool natcasesort(array &$array_arg) * Description: Sort an array using case-insensitive natural sort * Source code: ext/standard/array.c */ /* * Test natcasesort() with extended ASCII characters */ $array = array ('Süden', 'spielen','Sonne','Wind','Regen','Meer'); echo "\n-- Before sorting: --\n"; var_dump($array); echo "\n-- After Sorting: --\n"; var_dump(natcasesort($array)); var_dump($array); echo "Done"; ?> --EXPECTF-- -- Before sorting: -- array(6) { [0]=> unicode(5) "Süden" [1]=> unicode(7) "spielen" [2]=> unicode(5) "Sonne" [3]=> unicode(4) "Wind" [4]=> unicode(5) "Regen" [5]=> unicode(4) "Meer" } -- After Sorting: -- bool(true) array(6) { [5]=> unicode(4) "Meer" [4]=> unicode(5) "Regen" [2]=> unicode(5) "Sonne" [1]=> unicode(7) "spielen" [0]=> unicode(5) "Süden" [3]=> unicode(4) "Wind" } Done
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php