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
[email protected] | 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