json_encode函数:特殊字符

use*_*490 41 php json

使用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

json_encode的手册指定了这个:

所有字符串数据必须采用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().

文件

  • array_map 什么都不做 (2认同)
  • 这应该是最好的答案. (2认同)

deW*_*eW1 15

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

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

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


从5.5.0开始,失败时的返回值从空字符串更改为FALSE.

  • 我已经尝试清理字符串以符合UTF-8而没有任何成功.什么对我有用 - 在填充数组之前将MySQL名称设置为UTF-8:$ mysqli-> query("SET NAMES'utf8'"); 现在所有特殊字符都显示完美. (6认同)

小智 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 标准中的特殊字符

  • 您的答案似乎是 [半年前的答案](http://stackoverflow.com/a/20694425/19068) 中代码的复制/粘贴,但合并为一个语句。 (5认同)
  • 小心!`utf8_encode()` 仅当源是 ISO-8859-1 时才有效!http://php.net/manual/en/function.utf8-encode.php (2认同)

Lak*_*tra 5

使用下面的函数。

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)