gpt4 book ai didi

php - 从 php5.6 升级到 php7.0 时 utf8 编码中断

转载 作者:行者123 更新时间:2023-11-28 23:30:20 24 4
gpt4 key购买 nike

我有一个简单的(自定义的)CMS 接受 Markdown 并将其显示在网页中。在 php5.6 中工作正常(在 ubuntu 15.10 上使用 ondrej/php5 ppa)。 Mysql 排序规则到处都设置为 utf8。

将服务器升级到php7.0 (ondrej/php) 显示乱码。我尝试将相关的 mysql 表和字段迁移到 utf8mb4/utf8mb4_unicode_ci 但没有成功。

降级到 php5.6,一切正常。我有一种预感,这是一些我不知道的奇怪的 php 设置? php.ini 默认排序规则=UTF-8。找不到其他有用的东西。无论是什么版本的 php 或服务器设置,phpMyAdmin 都会显示垃圾,因此帮助不大。 接下来我可以尝试什么?

源文本(从php5.6渲染页面复制过来)

아동 보호 정책에 대한 규정
This Code is part of the

渲染输出(来自 php7 和 phpMyAdmin)

ì•„ë™ ë³´í˜¸ ì •ì±…ì— ëŒ€í•œ ê·œì •
This Code is part of the

最佳答案

使用它来将表更改为 utf8mb4:

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci;

但是,如果表格已经弄乱了,那么这将无法修复它。执行以下操作以验证:

SELECT col, HEX(col) FROM tbl WHERE ...

例如,한동 보호 정책에 대한 규정 将显示十六进制 EC9584 EB8F99 EBB3B4 ED98B8 ECA095 ECB185 EC9790 EB8C80 ED959C EAB79C ECA095。 (请忽略空格。)

对于韩文文本,您应该会看到(大部分)Ewxxyy 形式的 3 个十六进制字节组,其中 w 是 A 或 B 或 C 或 D,如上例所示。十六进制20(只有1个字节)代表一个空格。

ì•„ë™ ë³´í∼¸ ì •ì±…ì— ëŒ€í•œ ê·œì • 是它的 Mojibake。这意味着某处 latin1 被错误地涉及,可能是在您 INSERTed 文本时。在这种情况下,您会看到类似 C3AC E280A2 E2809E C3AB C28F E284A2 C3AB C2B3 C2B4 C3AD CB9C C2B8 ... 的内容——主要是 2 字节 Cwxx 十六进制。

如果您看到,像这样的 UPDATE 将修复数据:CONVERT(BINARY(CONVERT(CONVERT(col USING utf8mb4) USING latin1)) USING utf8mb4) (编辑:删除了对 UNHEX 的调用。)

关于php - 从 php5.6 升级到 php7.0 时 utf8 编码中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37518253/

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