我刚刚从 mysql 5.5 升级到 5.6,5.6 版本的默认编码是 UTF-8。
所有 ajax 请求也都以 UTF-8 处理,所以我决定将数据库中的数据和网站上的编码转换为 UTF-8。
但是现在我遇到了一个问题..网站上的所有特殊(unicode)字符都显示不正确..它们显示为编码的 UTF-8 字符串(双字节)
整个网站都是用 100% jquery 构建的,所有字符串都由 ajax 请求提供并用 jquery 附加/编写......我不知道我做错了什么?!
数据库连接
$dbh = new PDO($driver.':dbname='.$db.';host='.$host.';port='.$port.';charset=utf8', $user, $pass);
数据库中的所有表和列都转换为 UTF-8_bin
HTML 编码
header('Content-Type: text/html; charset=utf-8');
<meta charset="utf-8" />
HTML 页面以 UTF-8 编码。既从 PHP 发送标头,又在 HTML 文档的标头中添加了元标记
Ajax 请求
header('Content-Type: application/json; charset=utf-8');
{
type : 'post',
async : true,
cache : false,
dataType : 'json',
timeout : 15000,
contentType : 'application/x-www-form-urlencoded;charset=utf-8',
global : true,
url : APIURL,
data : {},
success : function(){}
}
所有 Ajax 请求都是使用这些属性发出的
阿贾克斯响应
{"result":[{"id":"391","string":"BTN_ADD_ACCOUNTS","da":"Tilf\u00c3\u00b8j regnskab","en":"Add accounts"},{"id":"321","string":"BTN_ADD_ENTRY" ...
该值Tilf\u00c3\u00b8j regnskab
应显示为Tilføj regnskab
在页面上,但显示为Tilføj regnskab
在 phpmyadmin 中浏览数据库时,所有数据均正确显示
我可以通过 Ajax 请求将数据放入数据库并且数据存储正确,但无法通过 Ajax 请求检索数据
更新 - 数据库获取
header('Content-Type: text/html; charset=utf-8');
$connect = $driver.':dbname='.$db.';host='.$host.';port='.$port.';charset=utf8';
$dbh = new PDO($connect, $user, $pass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sth = $dbh->prepare("SELECT da FROM lang WHERE string='HDL_CLIENT'");
$sth->execute();
$row = $sth->fetch(PDO::FETCH_ASSOC);
print_r($row);
// result
klient æå