Я работаю над интерфейсом администратора расширения доставки OpenCart.
У меня есть форма со скрытым полем, это поле заполняется JSON.stringify(rules)
во внешнем интерфейсе.
Переменная rules
представляет собой многоуровневый объект.
В контроллере я могу прочитать переменную $this->request->post['rules']
и выглядит как действительный JSON, но json_last_error()
дает мне JSON_ERROR_SYNTAX
Я проверяю, что мой JSON является UTF-8 с mb_detect_encoding()
(возвращает 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"
{"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 (или что-то еще) добавляет "
вместо "
в строку JSON.
Кто-нибудь знает простой способ очистить это?
var_dump($this->request->post['rules'])
. Вы не должны коверкать строку json с помощьюstr_replace
и тому подобного. эти функции не безопасны для юникода. - person Marc B   schedule 10.06.2014JSON.parse(str)
. - person zzzzBov   schedule 10.06.2014JSON
иjson_decode()
на нем работает. пожалуйста, предоставьте больше кода или пример, в которомjson_decode()
терпит неудачу. - person low_rents   schedule 10.06.2014var_dump($this->request->post['rules'])
равенstring(337) "{"IRIYL":{"id":"IRIYL","name":"Free","high":99999,"low":575,"amount":0,"type":1},"YWHDM":{"id":"YWHDM","name":"25%","high":575,"low":0,"amount":25,"type":1}}"
Я не добавлял утилитуstr_replace
после того, как понял проблему, я удалил no , так как это не решило проблему. - person mbryant   schedule 11.06.2014JSON.stringify(rules)
, но затем читается в PHP - person mbryant   schedule 11.06.2014