gpt4 book ai didi

php - 通过远程数据库连接 utf8 与本地连接返回的字符不同

转载 作者:行者123 更新时间:2023-11-29 13:49:10 25 4
gpt4 key购买 nike

我正在尝试通过远程 mysql 数据库连接检索外语 UTF8 数据。当我远程检索数据时,utf8 在浏览器中无法正确显示。但是,当我通过本地数据库连接检索数据时,无论是在实时站点上还是在本地测试机上,字符都在浏览器中正确显示。

我的远程连接是从wamp本地服务器到在线直播网站。

对于我设置的每个页面:

header('Content-Type: text/html; charset=utf-8');

我还尝试设置 UTF-8 元标记。我还在 .htaccess 中指定了 UTF8 作为默认字符集。

这是一个较旧的网站,所以我仍在使用 mysqli。我也尝试过设置:

$mysqli->set_charset("utf8");

例如,通过远程连接 Français 将显示为 Français。

我不知道该怎么办。我花了几个小时试图弄清楚,但无济于事。我知道索要代码是常态,但代码太多,我无法将其全部包含在这里。

谢谢!

最佳答案

你的解决方案是:在远程数据库上,the data is encoded to utf8 twice ,这会产生不正确的结果。你的代码没有问题,数据库有问题。您可以在那里修复它(如果它是 varchar,首先进行备份!):首先将其转换为 latin1,然后转换为二进制,然后转换为 utf8。一个有效的 sql fiddle 向您展示 here 是如何的,我也会将代码粘贴到此处,以防 sqlfiddle 将来将其删除:

-- database column correctly defined as utf8
CREATE TABLE base (col VARCHAR(128) CHARSET utf8);
-- wrong data is entered:
INSERT INTO base SELECT UNHEX('4672616EC383C2A7616973');
-- first, convert back to latin-1, we have now proper utf-8 data, but in a latin1 column
ALTER TABLE base MODIFY COLUMN col VARCHAR(128) CHARSET latin1;
-- convert to binary first, so MySQL leaves the bytes as is without conversion
ALTER TABLE base MODIFY COLUMN col VARBINARY(128);
-- then convert to the proper character set, which will leave the bytes once again intact
ALTER TABLE base MODIFY COLUMN col VARCHAR(128) CHARSET utf8;

关于php - 通过远程数据库连接 utf8 与本地连接返回的字符不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16945436/

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