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

Reply via email to