我正在开发OpenCart发货扩展的管理界面。
我有一个包含隐藏字段的表单,此字段由前端的JSON.stringify(rules)
填充
变量rules
是一个多层对象。
在控制器中,我可以阅读$this->request->post['rules']
变量,看起来是有效的JSON,但是json_last_error()
给了我JSON_ERROR_SYNTAX
我用mb_detect_encoding()
检查我的JSON是UTF-8(返回ASCII
)
我有
使用以下代码删除了无效字符
for ($i = 0; $i <= 31; ++$i) {
$rules = str_replace(chr($i), "", $rules);
}
$rules = str_replace(chr(127), "", $rules);
if (0 === strpos(bin2hex($rules), 'efbbbf')) {
$rules = substr($rules, 3);
}
我生成的JSON&#34;
的示例{"SMEVT":{"id":"SMEVT","name":"Free","high":99999,"low":575,"amount":0,"type":1},"VZWSR":{"id":"VZWSR","name":"25%","high":575,"low":0,"amount":25,"type":1}}
我无法弄清json_decode
无效的内容。谢谢你的帮助。
更新:
我使用strlen($rules)
并发现字符串比预期的要长得多,似乎OpenCart(或somthingelse)正在添加"
来代替JSON字符串中的"
。
任何人都知道一种简单的清理方法吗?
答案 0 :(得分:0)
似乎OpenCart(或其他东西)正在将"
(引号)更改为"
,以打破JSON。
我添加了以下行,因为我解码了JSON,这解决了这个问题。
$rules = str_replace('"', '"', $rules);