PHP警告:json_encode():带有GBP( ;)磅符号的参数中存在无效的UTF-8序列


PHP Warning: json_encode(): Invalid UTF-8 sequence in argument with GBP (£) pound symbol

有人能告诉我为什么会出现以下错误吗:

PHP Warning: json_encode(): Invalid UTF-8 sequence in argument

json_encode'调用以下数组(输出到Apache错误日志)时:

Array'n('n [currency] => GBP'n [currency_symbol] => 'xa3'n)'n, 

使用以下代码(我使用的是PHP 5.4.45):

echo json_encode($output);

我正在用AJAX发出请求,当我在控制台中查看时,我看到了以下内容:

"currency":"GBP","currency_symbol":空

因此,当它出错时,PHP只是将其返回为null

为什么只有£符号而不是美元($)或欧元()会发生这种情况?

尝试写入

 mysqli_query('SET CHARACTER SET utf8')

您的SELECT查询之前。

最常见的问题是检索与预期结果不完全相同的字符集的数据。

编辑

如果你使用正确的PHP函数,这是安全的:

 mysqli_set_charset('utf8');

查看更多信息:http://php.net/manual/en/mysqli.set-charset.php

在将default_charset设置为UTF-8:之前尝试使用JSON_UNESCAPED_UNICODE

<?php
    ini_set('default_charset', 'UTF-8');
    $email_hooks = array(
            "forgot_password" => array(
                    "name" => "Forgot Password",
                    "keys" => array(
                            "site_url" => "Site URL",
                            "current_date" => "Curremt Date",
                            "user_name" => "User name",
                            "name" => "Name of the user",
                            "reset_url" => "Url for resetting password",
                            "user_email"  => "£"
                    )
            )
    );
     echo json_encode($email_hooks,JSON_UNESCAPED_UNICODE);

输出:

{"放弃密码":{"名称":"忘记密码","密钥":{