php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #76435 Float with decimals Filter issue with Ca_fr locale
Submitted: 2018-06-09 00:29 UTC Modified: 2021-08-05 16:50 UTC
From: joel dot lamothe dot 42 at gmail dot com Assigned: cmb (profile)
Status: Closed Package: Filter related
PHP Version: 7.1.18 OS: Windows
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: joel dot lamothe dot 42 at gmail dot com
New email:
PHP Version: OS:

 

 [2018-06-09 00:29 UTC] joel dot lamothe dot 42 at gmail dot com
Description:
------------
---
From manual page: http://www.php.net/filter.filters.sanitize
---

When setting the locale to fr_CA, using filter_var with decimal numbers is behaving irregularly since the comma is the decimal separator in fr_CA, the sanitized float becomes an int losing its comma.

filter_var is either not coded in a locale dependent way or this below scenario is not being caught in its handling of the locale.



Test script:
---------------
<?php
setlocale(LC_ALL, 'fr_CA.utf-8');
$number = 25 / 2;
$temp = filter_var($number, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

echo $temp;
?>

Expected result:
----------------
12,5

Actual result:
--------------
125

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2018-06-09 12:55 UTC] cmb@php.net
Not only is FILTER_SANITIZE_NUMBER_FLOAT not locale aware, but
there also is no possibility to manually override the decimal and
thousand separators[1] (like for FILTER_VALIDATE_FLOAT), which
rather limits its usefulness.

In this case one can get around this limitation by using the flag
FILTER_FLAG_ALLOW_THOUSAND instead of
FILTER_FLAG_ALLOW_FRACTION[2], but that's quite a hack.

[1] <https://github.com/php/php-src/blob/PHP-7.2.7/ext/filter/sanitizing_filters.c#L358-L367>
[2] <https://3v4l.org/IILhX>
 [2021-08-05 16:50 UTC] cmb@php.net
-Status: Open +Status: Closed -Assigned To: +Assigned To: cmb
 [2021-08-05 16:50 UTC] cmb@php.net
This issue is fixed as of PHP 8.0.0[1], where float to string
conversion (which is actually the culprit here) is no longer
locale aware.  This fix won't be backported.

[1] <https://3v4l.org/f08P7>
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 10:01:28 2024 UTC