php - 如何用 PHP 解码 MySQL 文本?
问题描述
在这个例子中我如何编码来自 MySQL 的文本?
这是文本在 MySQL 中的样子utf8mb4_unicode_ci
: $text = 'Wiesław';
到目前为止我已经尝试过:
header("Content-Type: text/html; charset=ISO-8859-1");
echo htmlentities($text);
echo '</br>';
echo html_entity_decode($text);
echo '</br>';
echo htmlspecialchars_decode($text);
echo '</br>';
echo htmlspecialchars_decode($text, ENT_NOQUOTES);
echo '</br>';
echo utf8_encode($text);
echo '</br>';
echo utf8_decode($text);
echo '</br>';
echo mb_convert_encoding($text, 'ISO-8859-1', 'UTF-8');
echo '</br>';
echo iconv('UTF-8', 'ISO-8859-1', $text);
echo '</br>';
echo mb_convert_encoding($text, 'UTF-8', 'ISO-8859-1');
结果:
Wies³aw
Wies³aw
Wies³aw
Wies³aw
Wies³aw
Wies?aw
Wies?aw
Wies³aw
期待:
维斯瓦夫
解决方案
Grrr .. 不要使用任何这些功能。相反,正确配置 MySQL。
好: utf8mb4_unicode_ci
-- 那是一个“排序规则”;它意味着CHARACTER SET utf8mb4
.
- 在客户端中有
UTF-8
字符。(显然,你这样做是因为你有一个 stoke-l)。 - 告诉 MySQL 客户端正在使用
utf8mb4
. 最好在建立连接时执行此操作。PHP 有mysqli
和PDO
. 每个细节:http: //mysql.rjweb.org/doc.php/charcoll#php - 将列(以及可选的表和数据库)声明为
CHARACTER SET utf8mb4
. 让我们看看SHOW CREATE TABLE
现在是否可以。
如果这样做之后,你得到
Wiesław -- Mojibake
Wies?aw -- question mark
Wies -- truncation
Wies�aw -- black diamond
然后用UTF-8字符去麻烦;我看到的不是我为进一步的建议和调试而存储的。
十六进制应该是57 69 65 73 C582 61 77
.
如果你得到57 69 65 73 C385 E2809A 61 77
,那么你有“双重编码”。
推荐阅读
- c# - .Net Framework 应用程序的应用程序机密
- python - Python:可视化决策树:IndexError:列表索引超出范围
- java - 与 JPA 保持多个 OneToMany 关系
- tfs - 在 2015 Xaml 构建中引用 BuildNumber
- android - Admob 插页式广告仅在应用中显示一次
- javascript - 在nodeJS中解析从客户端到服务器的值格式
- single-page-application - Preact 和 Parcel - 捆绑后的路由问题
- graphics - 使用组合图时控制图大小
- html - 使用引导程序禁用 div(带背景图像)
- asp.net-mvc - 使用 Html.EditorFor() 编辑/创建 Razor 页面