我目前正在一个以多种语言本地化的网站上工作,我遇到了一个问题,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/