UTF-8 php-mysqli 不起作用


UTF-8 php-mysqli not working

我正在使用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 中。