php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #68203 implode() for foat numbers use setlocale() settings!
Submitted: 2014-10-09 22:54 UTC Modified: 2014-12-06 20:10 UTC
From: i dot am dot brutto at gmail dot com Assigned:
Status: Not a bug Package: Strings related
PHP Version: 5.5.17 OS: Ubuntu
Private report: No CVE-ID: None
 [2014-10-09 22:54 UTC] i dot am dot brutto at gmail dot com
Description:
------------
---
From manual page: http://www.php.net/function.implode
---
There is no any information aboout this strange behavior. =\
Detect this was difficult enough because do not expect problems in such simple core things.

It's the same bug (https://bugs.php.net/bug.php?id=17815), but it dodn't fixed (as there marked).

Test script:
---------------
<?php

$locale = 'ru_RU';
putenv("LANG=$locale" . '.UTF-8');
putenv("LANGUAGE=$locale" . '.UTF-8');
setlocale(LC_ALL, $locale . '.UTF-8'); // . '.UTF-8'

$arr = array(12.12,12,23,21.44,67.88);
print_r(implode(',', $arr));

Expected result:
----------------
there is no logic. other string functions not affected with this. and nowhere information about it.

$arr = array(12.12,12,23,21.44,67.88);
print_r(implode(' | ', $arr)); 

expected => 12.12 | 12 | 23 | 21.44 | 67.88
current => 12,12 | 12 | 23 | 21,44 | 67,88 (setlocale to ru_RU for example)


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-10-10 03:51 UTC] chris at ctankersley dot com
Created a test for this:

--TEST--
implode() function - Floats use locale settings
--FILE--
<?php
$locale = 'ru_RU';
putenv("LANG=$locale" . '.UTF-8');
putenv("LANGUAGE=$locale" . '.UTF-8');
setlocale(LC_ALL, $locale . '.UTF-8'); // . '.UTF-8'

$arr = array(12.12,12,23,21.44,67.88);
print_r(implode(',', $arr));
--EXPECT--
12.12,12,23,21.44,67.88

From my end though, I couldn't seem to reproduce this. I tested this on a Windows build of 7.0.0-dev and on Ubuntu using their 5.5.9 package. 3v4l.org also shows that this works properly: http://3v4l.org/DpnLh
 [2014-10-10 08:05 UTC] i dot am dot brutto at gmail dot com
Cris,
reproduced on my Ubuntu 12.04(LTS) with PHP 5.5.15-1+deb.sury.org~precise+1 (cli) (built: Jul 24 2014 15:44:50) and PHP 5.5.17-2+deb.sury.org~precise+1 (cli) (built: Sep 25 2014 09:07:54)

Btw, check your installed locales via `locale -a`. RU locale must be installed.
 [2014-10-10 11:59 UTC] i dot am dot brutto at gmail dot com
Finally i realise what happens: all function return stings auto-format floats according to setllocale(). It means that event simple `echo $floatVar;` will be formatted as well. 

Ok. These logic clear. It would be good to add info about it in manual... But! If decimal sign are auto-formatted, expected that thousand sign will be also formatted (as in number_format()). Unfortunately that is not right in this php-version. Probably it was described somewhere else. IDN

>>>> test:
<?php
$locale = 'ru_RU';
putenv("LANG=$locale" . '.UTF-8');
putenv("LANGUAGE=$locale" . '.UTF-8');
setlocale(LC_ALL, $locale . '.UTF-8');

$number = 12300.45;

print_r(is_float($number)); // => true
print_r($number); // => 12300,45 ][ Expected: 12 300,45
print_r('This is :' . $number); // => 'This is 12300,45' ][ Expected: 12 300,45
print_r(implode('::', array($number, 12.89))); //=> '12300,45::12,89' ][ Expected 12 300,45::12,89
die();
<<<<
 [2014-12-06 20:10 UTC] ab@php.net
-Status: Open +Status: Not a bug
 [2014-12-06 20:10 UTC] ab@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php


 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Fri Aug 07 22:01:24 2020 UTC