【发布时间】:2020-06-12 07:55:24
【问题描述】:
我完全被困住了。
我有一个在 PHP4 和 MySQL4 上运行的旧网站。 SQL 数据包含斯洛伐克语特殊字符(á、š、ť、ľ、ž 等)。旧网站显示的字符很好。
我已将该站点迁移到新主机,它现在在 PHP 7.3 和 MariaDB 10.3 上运行。我已经用 MySQLi 替换了不推荐使用的 mysql_ 函数,现在代码运行良好。但是,角色完全乱了。
我遇到了多个问题和答案,这是我尝试过的:
-
将字符集设置为 utf8 和/或 windows-1250 到 mysqli 连接
$link->set_charset("utf8mb4"); mysqli_set_charset($mysqli, "utf8"); -
为每个 .php 文件设置 utf8 和/或 windows-1250 标头
header('Content-Type: text/html; charset=utf-8'); 使用 Sublime 文本以 UTF8 和/或 windows-1250 编码手动重新保存每个文件
将数据库排序规则更改为 utf8_unicode_ci、utf8_slovak_ci 以及其他内容
-
更改所有表和数据库的字符集
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci; ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; -
使用 PHP 的 iconv 手动将输出从 UTF8 转换为 windows-1250(这更加混乱了输出)
$output = iconv( "Windows-1250", "UTF-8", ($output)); 在导入旧数据库时尝试了不同的排序规则。还尝试在 phpMyAdmin 中使用和不使用 MYSQL40 导入兼容模式
-
同时设置 utf8 和/或 windows-1250 html 元字符集
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <meta charset="UTF-8">
我发现的东西。当我直接在 phpMyAdmin 中读取 SQL 数据时,它会在旧数据库(mysql4)和新数据库中显示完全相同的数据,但编码混乱。但是,旧网站以某种方式在前端正确显示它。
我真的被困住了,我真的认为我已经尝试了所有解决方案。可能是什么问题?
【问题讨论】:
-
您是否尝试过删除行/添加具有相同字母的新行?当服务器更新时,可能表行搞砸了。您也可以尝试创建一个新数据库,看看格式是否也搞砸了。
-
你能说出应该显示什么以及现在显示什么吗?
-
用一些插入数据给你的表创建查询
-
或附上表格以便我们可以看到发生了什么
-
帮助调试:
SELECT HEX(col), col FROM ...以查看表中的内容。
标签: php mysql encoding utf-8 character-encoding