我有这样的json对象,该网站正在运行codeigniter,这最终是问题所在。
var obj = {
states : {
'state' : {cities : ['city', 'city2', 'another']},
}
}
问题是某些州有特殊字符,如空格。当这些状态被添加时,我得到不允许的密钥字符。错误。如果我删除特殊字符和空格它工作正常。
我是否必须采用其他方法?
答案 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)
如果您仍然需要URL中的这些字符,您可以在CI中配置这些字符,不需要扩展任何内容或触摸核心(在您的system / application / config / config.php文件中):< / p>
$ config ['allowed_uri_chars'] ='a-z 0-9~%。:_- | = - @';