gpt4 book ai didi

php - 如何处理 javascript 字符串中的 UTF-8

转载 作者:可可西里 更新时间:2023-11-01 07:40:24 24 4
gpt4 key购买 nike

我刚刚从 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 发送 header 并在 HTML 文档的 header 中添加元标记

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 请求都是使用这些属性发出的

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 æå

最佳答案

我没有注意到重要的一点。正如 icktoofay 指出的那样,您的 JSON 已经损坏:

>>> "Tilf\u00c3\u00b8j regnskab"
"Tilføj regnskab"

您有 两个 个字符 (\u00c3\u00b8) 来表示 ø(显然是一个字符)。因为ø是U+00F8它应该只是 \u00f8:

>>> "Tilf\u00f8j regnskab"
"Tilføj regnskab"

问题出在生成该 JSON 的 PHP 脚本中,而不是在使用它的 JavaScript 代码中。可能性:

  • 您的数据已在 DB 损坏。
  • 您的数据在获取时损坏。

ø 的 UTF-8 表示是“0xC3 0xB8 (c3b8)”。需要确保您看到那些字节。打印十六进制值:

  • MySQL - SELECT HEX(column_name) FROM table_name
  • PHP - var_dump( bin2hex($variable) );

关于php - 如何处理 javascript 字符串中的 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16266549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com