json_encode功能:特殊字符

2022-08-30 09:53:31

使用json_encode对数组进行编码时,包含特殊字符的数组元素将转换为空字符串:

$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....);
$json = json_encode($arr);

JSON 编码后,元素 [funds] 为 null。它只发生在特殊字符(版权,商标等)中,例如“ComStage STOXX®Europe 600 Techn NR ETF”中的字符。

有什么建议吗?

谢谢

更新:这是在填充数组之前解决问题的方法(所有名称均取自数据库):

$mysqli->query("SET NAMES 'utf8'");

答案 1

json_encode手册指定了以下内容:

所有字符串数据都必须采用 UTF-8 编码。

因此,在对数组进行编码之前,请尝试 ping 到数组:array_maputf8_encode()

$arr = array_map('utf8_encode', $arr);
$json = json_encode($arr);

// {"funds":"ComStage STOXX\u00c2\u00aeEurope 600 Techn NR ETF"}

作为参考,请看一下这个小提琴上三个示例之间的差异。第一个不使用字符编码,第二个使用,第三个使用 - 它们都返回不同的结果。htmlentitiesutf8_encode

为了保持一致性,应使用 。utf8_encode()

文档


答案 2

您的输入必须编码为 UTF-8 或 ISO-8859-1。

http://www.php.net/manual/en/function.json-encode.php

因为如果您尝试转换非 utf8 字符的数组,您将获得 0 作为返回值。


自 5.5.0 起,失败时的返回值已从空字符串更改为 FALSE。


推荐