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 this is not your bug, you can add a comment by following this link.
If this is your bug, but 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

Add a Patch

Pull Requests

Add a Pull Request

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: Fri Apr 26 19:01:29 2024 UTC