Работя върху администраторския интерфейс на разширение за доставка на 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
и други подобни. тези функции не са безопасни за Unicode. - 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