|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2008-02-04 15:18 UTC] trickie at gmail dot com
Description:
------------
If you set the locale to 'lv_LV.UTF-8' and have the locale generated on your system, then the code below will return garbage as the 'thousands separator'. It displays ok for me when running with CLI SAPI
Reproduce code:
---------------
<?php
if (false !== setlocale(LC_ALL, 'lv_LV.UTF-8')) {
$locale_info = localeconv();
echo number_format(20000,0,$locale_info['decimal_point'], $locale_info['thousands_sep']);
}
?>
Expected result:
----------------
20 000
Actual result:
--------------
20�000
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Nov 04 22:00:01 2025 UTC |
What does this output: <?php if (false !== setlocale(LC_ALL, 'lv_LV.UTF-8')) { $locale_info = localeconv(); var_dump($locale_info); } ?>Output requested: array(18) { ["decimal_point"]=> string(1) "," ["thousands_sep"]=> string(2) "��" ["int_curr_symbol"]=> string(4) "LVL " ["currency_symbol"]=> string(2) "Ls" ["mon_decimal_point"]=> string(1) "," ["mon_thousands_sep"]=> string(2) "��" ["positive_sign"]=> string(0) "" ["negative_sign"]=> string(1) "-" ["int_frac_digits"]=> int(2) ["frac_digits"]=> int(2) ["p_cs_precedes"]=> int(1) ["p_sep_by_space"]=> int(1) ["n_cs_precedes"]=> int(1) ["n_sep_by_space"]=> int(1) ["p_sign_posn"]=> int(3) ["n_sign_posn"]=> int(3) ["grouping"]=> array(2) { [0]=> int(3) [1]=> int(3) } ["mon_grouping"]=> array(2) { [0]=> int(3) [1]=> int(3) } }The "garbage" you get is a non-breaking space in UTF-8. You can always use utf_decode() on it: <?php if (false !== setlocale(LC_ALL, 'lv_LV.UTF-8')) { $locale_info = localeconv(); echo number_format(20000,0,$locale_info['decimal_point'], utf8_decode($locale_info['thousands_sep'])); } ?> Since unicode support is coming in PHP6 and will not be addressed before, this is "wont fix" in earlier versions. I suggest you really don't use setlocale() if you want to use UTF-8. At least not for numbers.