在CODEIGNITER中向JSON键添加空格和特殊字符

在CODEIGNITER中向JSON键添加空格和特殊字符,json,codeigniter,Json,Codeigniter,我有这样的json对象,站点运行的是codeigniter,这是最终的问题所在 var obj = { states : { 'state' : {cities : ['city', 'city2', 'another']}, } } 问题是有些状态有特殊的字符,如,或空格。当添加这些状态时,我会得到一个不允许的关键字符。错误。如果我删除特殊字符和空间,它就可以正常工作 我必须求助于其他方法吗?我不确定是否是这样,但url中不允许使用这些字符。

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

var obj = {

      states : {
         'state' : {cities : ['city', 'city2', 'another']},
      }
   }
问题是有些状态有特殊的字符,如,或空格。当添加这些状态时,我会得到一个不允许的关键字符。错误。如果我删除特殊字符和空间,它就可以正常工作


我必须求助于其他方法吗?

我不确定是否是这样,但url中不允许使用这些字符。也许您正在使用
GET
?尝试使用
POST

我不确定这是否就是它,但url中不允许使用这些字符。也许您正在使用
GET
?尝试使用
POST

尝试在PHP端使用此函数

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

$json = fixjson($json);

尝试在PHP端使用此函数

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

$json = fixjson($json);

有些角色是不允许的。您可以在将它们插入JSON之前对它们进行urlencode()-请参见一些字符是不允许的。您可以在将它们插入JSON之前对它们进行urlencode()-请参见

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


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

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

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

  • 您应该始终对json进行编码
  • 如果URL中仍然需要这些字符,则可以在CI中配置这些字符,无需扩展任何内容或触及核心(在system/application/config/config.php文件中):

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

  • 您应该始终对json进行编码
  • 如果URL中仍然需要这些字符,则可以在CI中配置这些字符,无需扩展任何内容或触及核心(在system/application/config/config.php文件中):

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


  • json从未到达php端。json从未到达php端。问题是,javascript创建了对象,因此urlenecode是禁止的。请尝试encodeURIComponent(str)-查看问题是,javascript创建了对象,因此urlenecode是禁止的。请尝试encodeURIComponent(str)-查看