Incorrect sorting of the Scandinavian alphabets |
Incorrect sorting of the Scandinavian alphabets |
Christian J |
Oct 23 2006, 06:11 PM
Post
#1
|
. Group: WDG Moderators Posts: 9,661 Joined: 10-August 06 Member No.: 7 |
Not only PHP sorts the Swedish letters å, ä and ö incorrectly, now I noticed that javascript does the same, and also in Danish and Norwegian. The arrays below should be in the correct order for each language:
CODE window.onload=function() { var se=['å','ä','ö']; // Swedish var dk=['æ','ø','å']; // Danish, apparently same as Norwegian alert(se.sort()); alert(dk.sort()); } Note that Danish and Norwegian use a different order than Swedish. But in the sorted javascript alerts the Swedish letters are incorrectly sorted as "ä,å,ö", while Danish and Norwegian are (again incorrectly) sorted as "å,æ,ø". The same error appear in IE, Opera and Firefox. At least Opera's Norwegian creators should know their own alphabet, so am I correct in assuming that all three browser vendors deliberately follow some flawed convention? |
Darin McGrew |
Oct 23 2006, 06:55 PM
Post
#2
|
WDG Member Group: Root Admin Posts: 8,365 Joined: 4-August 06 From: Mountain View, CA Member No.: 3 |
Does PHP allow you to specify the locale? The default locale is often "C", which sorts characters according to their numeric encoding. Other locales should sort characters as appropriate for that locale.
|
Christian J |
Oct 24 2006, 05:48 AM
Post
#3
|
. Group: WDG Moderators Posts: 9,661 Joined: 10-August 06 Member No.: 7 |
Does PHP allow you to specify the locale? It does, but it seems to be buggy. The entry on http://bugs.php.net/bug.php?id=9671 (10 Mar 2001 1:36pm) suggests something like this, which still sorts in the wrong order (PHP 4.3.3): CODE <?php // Danish letters $dk = array('ø', 'æ', 'å'); setlocale(LC_COLLATE, "dk_DK"); usort($dk, "strcoll"); print_r($dk); // returns "Array ( [0] => å [1] => æ [2] => ø )" echo '<br>'; // Norwegian letters $no = array('ø', 'æ', 'å'); setlocale(LC_COLLATE, "no_NO"); usort($no, "strcoll"); print_r($no); // returns "Array ( [0] => å [1] => æ [2] => ø )" echo '<br>'; // Swedish letters $se = array('å', 'ä', 'ö'); setlocale(LC_COLLATE, "sv_SV"); usort($se, "strcoll"); print_r($se); // returns "Array ( [0] => ä [1] => å [2] => ö )" ?> |
Lo-Fi Version | Time is now: 27th April 2024 - 09:15 PM |