json_decode 根据语言环境重新格式化 JSON 中的小数

Posted

技术标签:

【中文标题】json_decode 根据语言环境重新格式化 JSON 中的小数【英文标题】:json_decode reformatting decimals in JSON based on locale 【发布时间】:2014-03-27 23:04:46 【问题描述】:

我目前正在开发一个以多种语言本地化的网站,我遇到了一个问题,即 json_decode 会根据区域设置重新格式化 JSON 字符串中的小数。当语言环境设置为“en”时,小数点保持不变。但是,例如,在“fr_FR”语言环境中,它们会更改为“13,3”。

源 JSON:

"debug":["id":13.3]

“en”的输出

Array
(
    [debug] => Array
        (
            [0] => Array
                (
                    [id] => 13.3
                )
        )
    )

“fr_FR”的输出

Array
(
    [debug] => Array
        (
            [0] => Array
                (
                    [id] => 13,3
                )
        )
    )

json_decode 这样做有什么原因吗?有什么办法可以预防吗?

该错误导致重力表单 Wordpress 插件出现问题,但我已经将问题隔离到 json_decode 函数。

【问题讨论】:

phpoutput 上格式化这些浮点数,我相信json_decode 与它无关。这样会更好吗? 可能重复 - ***.com/questions/2906326/… 【参考方案1】:

看起来问题在于 PHP 如何处理数值。 json_decode 只是将 13.3 转换为浮点数,在输出或转换为字符串时是本地化的“13,3”。但是,PHP 不能很好地处理本地化的数字格式。

根据thread,使用 setlocale 已解决问题(大部分)

setlocale(LC_NUMERIC, 'C');

【讨论】:

以上是关于json_decode 根据语言环境重新格式化 JSON 中的小数的主要内容,如果未能解决你的问题,请参考以下文章

如何根据语言环境仅显示日期的日期和月份?

PHP json_decode(); 为啥没输出

php 赋值运算符

Json_decode:详解

PHP json_encode json_decode UTF-8

php json_decode();解析出布尔值true是1,false为空,怎么解决?