note 24728 added to function.strcmp
| From: | php-general at lists dot php dot net | Date: | Tue, 27 Aug 2002 10:45:47 +0000 |
| Subject: | note 24728 added to function.strcmp | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-35718@lists.php.net to get a copy of this message | ||
In summary, strcmp() does not necessarily use the ASCII code order of each character like in the
'C' locale, but instead parse each string to match language-specific character entities
(such as 'ch' in Spanish, or 'dz' in Czech), whose collation order is then
compared. When both character entities have the same collation order (such as 'ss' and
'ß' in German), they are compared relative to their code by strcmp(), or considered equal
by strcasecmp().
The LC_COLLATE locale setting is then considered: only if LC_COLLATE=C or LC_ALL=C does strcmp()
compare strings by character code.
Generally, most locales define the following order:
control, space, punctuation and underscore, digit, alpha (lower then upper with Latin scripts; or
final, middle, then isolated, initial with Arabic script), symbols, others...
With strcasecmp(), the alpha subclass is ignored and consider all forms of letters as equal.
Note also that some locales behave differently with accented characters: some consider they are the
same letter as the unaccented letter (with a minor collation order, e.g. French, Italian, Spanish),
some consider they are distinct letters with an independant collation order (e.g. in the C locale,
or in Nordic languages).
Finally, the collation string is not considering individual characters but instead groups of
characters that form a single letter:
- for example "ch" or "CH" in Spanish which is always after all other strings
beginning with 'c' or 'C', including "cz", but before 'd' or
'D';
- 'ss' and 'ß' in German;
- 'dz', 'DZ' and 'Dz' in some Central European languages written with
the Latin script...
- UTF-8, UTF-16 (Unicode), S-JIS, Big5, ISO2022 character encoding of a locale (the suffix in the
locale name) first decode the characters into the UCS4/ISO10646 code position before applying the
rules of the language indicated by the main locale...
So be extremely careful to what you consider a "character", as it may just mean a encoding
byte with no significance in the string collation algorithm: the first character of the string
"cholera" in Spanish is "ch", not "c" !
--
http://www.php.net/manual/en/function.strcmp.php
http://master.php.net/manage/user-notes.php?action=edit+24728
http://master.php.net/manage/user-notes.php?action=delete+24728
http://master.php.net/manage/user-notes.php?action=reject+24728