ID: 47481 Updated by: hrad...@php.net Reported By: carsten_sttgt at gmx dot de Status: Open Bug Type: Strings related Operating System: * PHP Version: 5.2.8 New Comment:
The strnatcmp uses the zend_parse_paramters function to parse the function parameters. The zend_parse_parameters function converts the string from php space into a char. Seeing as how this is a core function, I doubt this will be fixed soon. I may be completely off base, so I will leave this bug open in case someone else wants to comment. Previous Comments: ------------------------------------------------------------------------ [2009-02-23 13:40:21] carsten_sttgt at gmx dot de Description: ------------ Hello, why is the nat_char defined as char instead of unsigned char? char limit us (and a correct sorting) to ASCII 0-127. With a unsigned char (ASCII 0-255) the sorting is "correct" for all single byte charsets like iso-8850-1 (which is the default in PHP). Internally the function is already doing a cast to unsigned char many times (but not in the main comparison). In the original header (strnatcmp.h) from the author, the typedef for nat_char is also only a hint. Regards, Carsten Reproduce code: --------------- <?php $daten = array('Süden','spielen','Sonne','Wind','Regen','Meer'); natcasesort($daten); print_r($daten); ?> Expected result: ---------------- Array ( [5] => Meer [4] => Regen [2] => Sonne [1] => spielen [0] => Süden [3] => Wind ) Actual result: -------------- Array ( [5] => Meer [4] => Regen [0] => Süden [2] => Sonne [1] => spielen [3] => Wind ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=47481&edit=1