有人可以告诉我为什么会收到以下错误:
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(€
)才会出现这种情况?
答案 0 :(得分:-1)
尝试写
mysqli_query('SET CHARACTER SET utf8')
在您的SELECT查询之前。
最常见的问题是检索与预期结果不完全相同的字符集的数据。
如果你使用正确的PHP函数,那就安全了:
mysqli_set_charset('utf8');
答案 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”:“£”}}}