使用json_encode对数组进行编码时,包含特殊字符的数组元素将转换为空字符串:
$arr = array ( "funds" => "ComStage STOXX®Europe 600 Techn NR ETF", "time"=>....);
$json = json_encode($arr);
在JSON编码之后,元素[funds]为空。它只发生在“ComStageSTOXX®Europe600Techn NR ETF”中的特殊字符(版权,商标等)上。
有什么建议吗?
由于
更新:这是在填充数组之前解决问题的方法(所有名称都来自数据库):
$mysqli->query("SET NAMES 'utf8'");
答案 0 :(得分:39)
The manual for json_encode specifies this:
所有字符串数据必须采用UTF-8编码。
因此,在对数组进行编码之前,请先尝试array_map
ping utf8_encode()
:
$arr = array_map('utf8_encode', $arr);
$json = json_encode($arr);
// {"funds":"ComStage STOXX\u00c2\u00aeEurope 600 Techn NR ETF"}
供参考,请查看the three examples on this fiddle之间的差异。第一个不使用字符编码,第二个使用htmlentities
,第三个使用utf8_encode
- 它们都返回不同的结果。
为保持一致性,您应该使用utf8_encode()
。
文档
答案 1 :(得分:13)
您的输入必须编码为UTF-8或ISO-8859-1。
http://www.php.net/manual/en/function.json-encode.php
因为如果您尝试转换非utf8字符数组,那么您将获得0作为返回值。
从5.5.0开始,失败时的返回值从空字符串更改为FALSE。
答案 2 :(得分: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);
答案 3 :(得分:4)
你应该使用这段代码:
$json = json_encode(array_map('utf8_encode', $arr))
array_map函数转换UTF8标准中的特殊字符
答案 4 :(得分:0)
使用以下功能。
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;
}
答案 5 :(得分:-3)
你应该在元标记中添加charset = UTF-8并使用json_encode作为特殊字符
$json = json_encode($arr);
json_encode函数转换UTF8标准中的特殊字符
答案 6 :(得分:-3)
1。mysql_set_charset('utf8');
//将此行设置在您使用json的页面顶部。
latin1_swedish_ci
"。