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

ale*_*lot 4 php wordpress json localization

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

源 JSON:

{"debug":[{"id":13.3}]}
Run Code Online (Sandbox Code Playgroud)

“en”的输出

Array
(
    [debug] => Array
        (
            [0] => Array
                (
                    [id] => 13.3
                )
        )
    )
Run Code Online (Sandbox Code Playgroud)

“fr_FR”的输出

Array
(
    [debug] => Array
        (
            [0] => Array
                (
                    [id] => 13,3
                )
        )
    )
Run Code Online (Sandbox Code Playgroud)

json_decode 有什么理由这样做吗?有什么办法可以预防吗?

该错误导致 Gravity Forms Wordpress 插件出现问题,但我已经将问题与 json_decode 函数隔离开来。

ale*_*lot 5

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

根据这个线程,使用 setlocale 已经解决了这个问题(在大多数情况下)

setlocale(LC_NUMERIC, 'C');
Run Code Online (Sandbox Code Playgroud)