将空格和特殊字符添加到JSON Key IN CODEIGNITER

时间:2010-08-27 03:08:37

标签: json codeigniter

我有这样的json对象,该网站正在运行codeigniter,这最终是问题所在。

var obj = {

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

问题是某些州有特殊字符,如空格。当这些状态被添加时,我得到不允许的密钥字符。错误。如果我删除特殊字符和空格它工作正常。

我是否必须采用其他方法?

5 个答案:

答案 0 :(得分:1)

事实证明,此错误是由CI的输入库引起的。在第215行,你会发现_clean_input_keys函数,它使用preg_match()来禁止你的键中的某些字符。因此,当您发送JSON并且php将其作为数组接收时,它可能会抛出错误。

要解决此问题,您可以扩展库或编辑CI核心。

答案 1 :(得分:0)

我不确定这是不是,但这些字符不允许在网址中。也许你正在使用GET?尝试使用POST

答案 2 :(得分:0)

尝试在PHP端使用此功能。

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

$json = fixjson($json);

答案 3 :(得分:0)

有些角色不被允许。您可以在将它们插入JSON之前对它们进行urlencode() - 请参阅CodeIgniter - Disallowed Key Characters via $_GET

答案 4 :(得分:0)

  1. 您应该始终对您的json进行编码。
  2. 如果您仍然需要URL中的这些字符,您可以在CI中配置这些字符,不需要扩展任何内容或触摸核心(在您的system / application / config / config.php文件中):< / p>

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