11 回答
我有一个类似的错误,由于在查询中返回了错误的字符集,每当字符串中有一个 hi-ascii 字符(例如弯撇号)时,它就会导致 json_encode 返回一个空字段。
解决方案是通过添加以下内容来确保它以 utf8 格式出现:
mysql_set_charset('utf8');
在 mysql 连接语句之后。
似乎符号是Å
,但由于数据由不应该公开的姓氏组成,因此只显示了第一个字母,并且由 just 完成$lastname[0]
,这对于多字节字符串是错误的,并造成了整个麻烦。将其更改为mb_substr($lastname, 0, 1)
- 像魅力一样工作。
问题是这个字符是 UTF8,但是 json_encode 没有正确处理它。多说一句,还有一个其他字符列表(参见Unicode 字符列表),会触发相同的错误,所以去掉这个 (Å) 并不能解决问题。
我们使用的是将这些字符转换为 html 实体,如下所示:
htmlentities( (string) $value, ENT_QUOTES, 'utf-8', FALSE);
确保您与 MySQL 的连接字符集是 UTF-8。它通常默认为 ISO-8859-1,这意味着 MySQL 驱动程序会将文本转换为 ISO-8859-1。
您可以使用mysql_set_charset、mysqli_set_charset或使用查询设置连接字符集SET NAMES 'utf-8'
使用此代码可能会有所帮助。它解决了我的问题!
mb_convert_encoding($post["post"],'UTF-8','UTF-8');
或者像那样
mb_convert_encoding($string,'UTF-8','UTF-8');
您发布的符号是损坏字节序列的占位符符号。基本上,它不是真正的符号,而是字符串中的错误。
符号的确切字节值是多少?盲目应用 utf8_encode 不是一个好主意,最好先找出字节来自哪里以及它们的含义。
json_encode 仅适用于 UTF-8 数据。您必须确保您的数据采用 UTF-8 格式。或者,您可以使用 iconv() 将结果转换为 UTF-8,然后再将它们提供给 json_encode()
引发此错误的另一件事是,当您使用 php 的 json_encode 函数时,unicode 字符是大写 \U 而不是小写 \u
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;
}
}
更新了..我通过说明 PDO 连接上的字符集解决了这个问题,如下所示:
“mysql:host=$host;dbname=$db;charset=utf8”
然后,收到的所有数据都在正确的字符集中供其余代码使用
在 json_encode 解决问题之前使用 setLocale('fr_FR.UTF8') 。