json_encode -参数中无效的UTF-8序列


json_encode - Invalid UTF-8 sequence in argument

我有json_encode问题。我得到

PHP Warning:  json_encode() [<a href='function.json-encode'>function.json-encode</a>]: Invalid UTF-8 sequence in argument in /var/www/html/web/example.php on line 500

然后我在php.ini中设置magic_quotes_gpc = 0(之前是1),它停止显示json_encode错误。

现在,我又开始得到同样的错误。php.ini中的Magic_quotes_gpc为0。我使用PHP 5.3

我发现很多答案都说要转换为UTF-8。但我不能这样做,因为我在许多地方使用json_encode和改变所有是不可能的。

我想解决根本问题,这样我就不需要改变json_encode代码。

在MySQL中, 的结果
SHOW VARIABLES LIKE 'character_set%';

character_set_client     latin1
character_set_connection latin1
character_set_database   latin1
character_set_filesystem binary
character_set_results   
character_set_server     latin1
character_set_system     utf8
character_sets_dir       /usr/share/mysql/charsets/

json_encode错误的原因是什么?

我正在使用zend服务器,我在zend服务器日志中看到这个json_encode错误。

我注意到的另一件事是,即使我在服务器日志中看到错误,它也可以正确地将数组转换为json。

将数组转换为json没有错误。那么为什么我在zend服务器中看到错误?

json_encode()需要有效的UTF-8数据作为输入。

你正在输入无效的数据。

根据您的描述,您可能从数据库连接中获得latin1数据,这将导致json_encode()阻塞。

将脚本中的数据库连接设置为UTF-8。如何做到这一点取决于您正在使用的数据库库。

下面是在最常见的库中切换到UTF-8的方法列表:UTF-8一直到

尝试在连接参数后添加以下说明:

mysql_set_charset('utf8');

对于结果值:

mb_convert_encoding($result,'UTF-8','UTF-8');