Добавление пробелов и специальных символов в ключ JSON IN CODEIGNITER - PullRequest
1 голос
/ 27 августа 2010

У меня есть такой объект json, на сайте запущен codeigniter, что, в конечном счете, является проблемой.

var obj = {

      states : {
         'state' : {cities : ['city', 'city2', 'another']},
      }
   }

Проблема в том, что в некоторых состояниях есть специальные символы, например, или пробелы.Когда эти состояния добавляются, я получаю ошибку Disallowed Key Characters. .Если я удаляю специальные символы и пространство, оно работает нормально.

Должен ли я прибегнуть к какому-либо другому методу?

Ответы [ 5 ]

1 голос
/ 27 августа 2010

Оказывается, эта ошибка была вызвана входной библиотекой CI.В строке 215 вы найдете функцию _clean_input_keys, которая использует preg_match () для запрета определенных символов в ваших ключах.Поэтому, когда вы отправляете JSON и php получает его как массив, он может выдать ошибку.

Чтобы это исправить, вы можете либо расширить библиотеку, либо отредактировать ядро ​​CI.

0 голосов
/ 30 августа 2010
  1. Вы должны кодировать свой JSON всегда.
  2. Если вам все еще нужны эти символы в URL, вы можете настроить их в CI, нет необходимости расширять что-либо или касаться ядра (в вашем файле system / application / config / config.php):

    $ config ['mitted_uri_chars '] =' a-z 0-9 ~%.: _- | = - @ ';

0 голосов
/ 27 августа 2010

Попробуйте использовать эту функцию на стороне PHP.

function fixjson($json){
return '('.preg_replace('/^([^[{].*)$/', '[$1]', $json).')';}

$json = fixjson($json);
0 голосов
/ 27 августа 2010

Некоторые персонажи просто запрещены.Вы можете urlencode () их перед вставкой в ​​JSON - см. CodeIgniter - Запрещенные ключевые символы через $ _GET

0 голосов
/ 27 августа 2010

Я не уверен, что это так, но эти символы не допускаются в URL Может быть, вы используете GET? Попробуйте использовать POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...