我正在使用ajax从查询中获取结果。ajax 给出响应(sql 查询成功执行),但某些字符(克罗地亚语)被破坏,因此 utf-8 无法正常运行。
在我的 php 脚本中,我尝试了以下内容:
$con->set_charset('utf8');
或
$con->query("SET NAMES 'utf8'");
我还在标题中添加了以下行:
header('Content-Type: text/html; charset=utf-8');
以及我的客户端-ajax 代码中的内容类型:
contentType: "application/json; charset=utf-8"
我的字符仍然中断,我没有得到 utf-8 有效响应。在phpMyAdmin中,我有我认为可以utf8_general_ci排序规则。
我已经找到了答案。
json_encode() 函数中的第二个参数 (JSON_UNESCAPED_UNICODE) 是问题所在。
echo json_encode($myArray,JSON_UNESCAPED_UNICODE);
因此,除了JSON_UNESCAPED_UNICODE,您必须添加以下代码行就足够了。
$con->set_charset('utf8');
如果您$con->set_charset('utf8');
切换到$con->query("SET NAMES 'utf8'");
,那么它将不起作用(您会收到服务器 500 错误)。
header('Content-Type: text/html; charset=utf-8');
不是必需的。
在修复 php 代码之前,您必须确保当您在 phyMyAdmin 或 smillar 中对数据库运行查询时,排序规则在我的情况下需要为 utf8utf8_general_ci。
当然,不要忘记
数据类型:"json"
在 jquery-ajax 中。