57
4

11 回答 11

33

我有一个类似的错误,由于在查询中返回了错误的字符集,每当字符串中有一个 hi-ascii 字符(例如弯撇号)时,它就会导致 json_encode 返回一个空字段。

解决方案是通过添加以下内容来确保它以 utf8 格式出现:

mysql_set_charset('utf8');

在 mysql 连接语句之后。

于 2013-03-03T08:20:27.813 回答
23

似乎符号是Å,但由于数据由不应该公开的姓氏组成,因此只显示了第一个字母,并且由 just 完成$lastname[0],这对于多字节字符串是错误的,并造成了整个麻烦。将其更改为mb_substr($lastname, 0, 1)- 像魅力一样工作。

于 2012-04-18T09:12:51.667 回答
22

问题是这个字符是 UTF8,但是 json_encode 没有正确处理它。多说一句,还有一个其他字符列表(参见Unicode 字符列表),会触发相同的错误,所以去掉这个 (Å) 并不能解决问题。

我们使用的是将这些字符转换为 html 实体,如下所示:

htmlentities( (string) $value, ENT_QUOTES, 'utf-8', FALSE);
于 2013-03-20T09:38:17.217 回答
13

确保您与 MySQL 的连接字符集是 UTF-8。它通常默认为 ISO-8859-1,这意味着 MySQL 驱动程序会将文本转换为 ISO-8859-1。

您可以使用mysql_set_charsetmysqli_set_charset或使用查询设置连接字符集SET NAMES 'utf-8'

于 2012-04-18T08:38:11.493 回答
10

使用此代码可能会有所帮助。它解决了我的问题!

mb_convert_encoding($post["post"],'UTF-8','UTF-8');

或者像那样

mb_convert_encoding($string,'UTF-8','UTF-8');
于 2015-04-29T18:25:12.480 回答
3

您发布的符号是损坏字节序列的占位符符号。基本上,它不是真正的符号,而是字符串中的错误。

符号的确切字节值是多少?盲目应用 utf8_encode 不是一个好主意,最好先找出字节来自哪里以及它们的含义。

于 2012-04-18T08:37:58.307 回答
0

json_encode 仅适用于 UTF-8 数据。您必须确保您的数据采用 UTF-8 格式。或者,您可以使用 iconv() 将结果转换为 UTF-8,然后再将它们提供给 json_encode()

于 2015-04-28T09:49:11.333 回答
0

引发此错误的另一件事是,当您使用 php 的 json_encode 函数时,unicode 字符是大写 \U 而不是小写 \u

于 2013-07-02T14:51:40.887 回答
0
I am very late but if some one working on SLIM to make rest api and getting same error can solve this problem by adding below line as:

<?php

// DbConnect.php file
class DbConnect
{
    //Variable to store database link
    private $con;

    //Class constructor
    function __construct()
    {

    }

    //This method will connect to the database
    function connect()
    {
        //Including the constants.php file to get the database constants
        include_once dirname(__FILE__) . '/Constants.php';

        //connecting to mysql database
        $this->con = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

        mysqli_set_charset($this->con, "utf8"); // add this line 
        //Checking if any error occured while connecting
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

        //finally returning the connection link
        return $this->con;
    }
}
于 2017-03-03T05:40:43.560 回答
0

更新了..我通过说明 PDO 连接上的字符集解决了这个问题,如下所示:

“mysql:host=$host;dbname=$db;charset=utf8”

然后,收到的所有数据都在正确的字符集中供其余代码使用

于 2016-07-15T10:03:34.567 回答
-2

在 json_encode 解决问题之前使用 setLocale('fr_FR.UTF8') 。

于 2014-10-04T15:58:36.913 回答