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

标签 php wordpress localization json

我目前正在一个以多种语言本地化的网站上工作,我遇到了一个问题,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 这样做有什么原因吗?有什么办法可以预防吗?

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

最佳答案

问题似乎出在 PHP 处理数值的方式上。 json_decode 只是将 13.3 转换为 float ,它在输出或转换为字符串时是本地化的“13,3”。但是,PHP 不能很好地处理本地化的数字格式。

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

setlocale(LC_NUMERIC, 'C');

关于php - json_decode 根据语言环境重新格式化 JSON 中的小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22019035/

相关文章:

javascript - JQuery DatePicker -> dateformat,如何输出dayNamesMin而不是dayNamesShort?

php - 用于显示 mysql 版本 5.0.45 的 mysql 数据库中用户定义函数的代码的 Mysql 查询是什么?

php - 根据站点日期创建数据透视比较表

macos - 本地化后 : Unable to find nib named . .. 在包路径中:(空)

wordpress - 上传的文件无法移动到 wp-content/uploads

php - 扩展的 Walker_Page 不输出自定义 start_lvl() 或 end_lvl()

php - 国际化验证

php - 如何从 Magento 获取产品类别列表及其 ID?

php - Laravel 4 显示表状态语句

php - ACF - 中继器仅显示最后输入的行,而不显示帖子中的所有行