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

Reply via email to