使用json_encode对数组进行编码时,包含特殊字符的数组元素将转换为空字符串:
$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....);
$json = json_encode($arr);
Run Code Online (Sandbox Code Playgroud)
在JSON编码之后,元素[funds]为空.它只发生在"ComStageSTOXX®Europe600Techn NR ETF"中的特殊字符(版权,商标等).
有什么建议?
谢谢
更新:这是在填充数组之前解决问题的方法(所有名称都来自数据库):
$mysqli->query("SET NAMES 'utf8'");
Run Code Online (Sandbox Code Playgroud)
Rob*_*ill 42
所有字符串数据必须采用UTF-8编码.
因此,在编码之前尝试array_mapping utf8_encode()您的数组:
$arr = array_map('utf8_encode', $arr);
$json = json_encode($arr);
// {"funds":"ComStage STOXX\u00c2\u00aeEurope 600 Techn NR ETF"}
Run Code Online (Sandbox Code Playgroud)
作为参考,请看一下这个小提琴上的三个例子之间的差异.第一个不使用字符编码,第二个使用htmlentities,第三个使用utf8_encode- 它们都返回不同的结果.
为了保持一致性,您应该使用utf8_encode().
文件
deW*_*eW1 15
您的输入必须编码为UTF-8或ISO-8859-1.
http://www.php.net/manual/en/function.json-encode.php
因为如果您尝试转换非utf8字符数组,您将获得0作为返回值.
从5.5.0开始,失败时的返回值从空字符串更改为FALSE.
小智 6
对我来说,它的工作原理如下:
# Creating the ARRAY from Result.
$array=array();
while($row = $result->fetch_array(MYSQL_ASSOC))
{
# Converting each column to UTF8
$row = array_map('utf8_encode', $row);
array_push($array,$row);
}
json_encode($array);
Run Code Online (Sandbox Code Playgroud)
小智 5
你应该使用这个代码:
$json = json_encode(array_map('utf8_encode', $arr))
Run Code Online (Sandbox Code Playgroud)
array_map 函数转换 UTF8 标准中的特殊字符
使用下面的函数。
function utf8_converter($array)
{
array_walk_recursive($array, function (&$item, $key) {
if (!mb_detect_encoding($item, 'utf-8', true)) {
$item = utf8_encode($item);
}
});
return $array;
}
Run Code Online (Sandbox Code Playgroud)