json_decode在OpenCart中返回JSON_ERROR_SYNTAX

时间:2014-06-10 14:53:53

标签: javascript json opencart

我正在开发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)正在添加&quot;来代替JSON字符串中的"

任何人都知道一种简单的清理方法吗?

1 个答案:

答案 0 :(得分:0)

似乎OpenCart(或其他东西)正在将"(引号)更改为&quot;,以打破JSON。

我添加了以下行,因为我解码了JSON,这解决了这个问题。

$rules = str_replace('&quot;', '"', $rules);