【问题标题】:ErrorException: json_encode(): Invalid UTF-8 sequence in argumentErrorException: json_encode(): 参数中的 UTF-8 序列无效
【发布时间】:2016-01-21 10:39:45
【问题描述】:

此问题发生在我的服务器中,但我无法重现此问题。我的代码如下

$data = [
            'param1' => urlencode($param1),
            'param2'  => urlencode($param2)
        ];
echo json_encode($data);

$param1 和 $param2 由查询字符串获取 前http://mydomain?param1=param1&param2=param2

我试图通过应用非 utf-8 字符来重现这一点,但无法重现。请帮我重现这个。 我测试的示例网址。

http://mydomain?param1=parÃÂam1&param2=param2

【问题讨论】:

  • urlencode 应该总是返回一个 ASCII 字符串,所以我看不出你的代码会如何产生“无效的 UTF-8 序列”错误。我怀疑还有别的东西在起作用。
  • 我尝试在不编码参数的情况下重现此问题,并且我将参数硬编码如下,但仍然无法重现此问题。 $param1 = "À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö"; $data = ['param1' => $param1]; echo json_encode($data);
  • @nwellnhof 你是对的,非常感谢你的帮助,实际上这个问题并没有因为这些参数而发生。我在数组中有另一个索引,例如 $data['param3'] = $_SESSION['param3'];当我将“\x99\x9C%”添加到会话中时,这可以重现。

标签: php json utf-8


【解决方案1】:

您提交给 json_encode 函数的字符串必须是 utf-8 编码的字符串。您可以按如下方式修复此错误

 echo json_encode(utf8_encode($data));

【讨论】:

  • 感谢@Thanga 的帮助我解决了这个问题,像这样更改代码 $param1 = urlencode(mb_convert_encoding($param1, 'UTF-8', 'UTF-8'))。但我需要对此进行测试并在现场或本地重现它。我尝试使用不同的字符,但还不能重现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多