json_encode函数:特殊字符

时间:2013-12-20 00:28:54

标签: php json

使用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'");

7 个答案:

答案 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的页面顶部。

  1. 如果要在数据库中保存json数据,请确保将特定列排序规则设置为" latin1_swedish_ci"。