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

时间:2015-11-09 11:53:02

标签: php json utf-8 php-5.4

有人可以告诉我为什么会收到以下错误:

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发出请求,当我查看控制台时,我看到了:

  

“货币”: “GBP”, “CURRENCY_SYMBOL”:空

...所以看起来好像错误时PHP只会将其返回为null

为什么只有£符号而非USD($)或EUR()才会出现这种情况?

2 个答案:

答案 0 :(得分:-1)

尝试写

 mysqli_query('SET CHARACTER SET utf8')
在您的SELECT查询之前

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

修改

如果你使用正确的PHP函数,那就安全了:

 mysqli_set_charset('utf8');

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

答案 1 :(得分:-1)

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

<?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);

<强>输出:

  

{“forgot_password”:{“name”:“忘记密码”,“密钥”:{“site_url”:“网站网址”,“current_date”:“Curremt日期”,“user_name”:“用户名”, “name”:“用户名”,“reset_url”:“用于重置密码的网址”,“user_email”:“£”}}}