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 函数。
【问题讨论】:
php 在 output 上格式化这些浮点数,我相信json_decode
与它无关。这样会更好吗?
可能重复 - ***.com/questions/2906326/…
【参考方案1】:
看起来问题在于 PHP 如何处理数值。 json_decode 只是将 13.3 转换为浮点数,在输出或转换为字符串时是本地化的“13,3”。但是,PHP 不能很好地处理本地化的数字格式。
根据thread,使用 setlocale 已解决问题(大部分)
setlocale(LC_NUMERIC, 'C');
【讨论】:
以上是关于json_decode 根据语言环境重新格式化 JSON 中的小数的主要内容,如果未能解决你的问题,请参考以下文章