0

嗯... Html 页面和 mysql 表包含西里尔文字。为了显示西里尔文字 Барысаў2000 我使用

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

在网页上。为了将该单词存储在 MySQL 表中,使用了 utf8_unicode_ci排序规则(我已经阅读了一些主题,据我了解,建议使用 utf8_unicode_ci 存储西里尔符号)。但是,我使用 phpMyAdmin 实际看到的是,文本 Барысаў2000 在数据库中存储为 Áàðûñà¢2000,这就是我希望解决的问题。(POST方法+转义危险符号用于将用户的文本保存到数据库中)。但是,当您选择该数据并将其显示在 html 页面上时,它看起来很好:Барысаў2000。

phpMyAdmin 如何为我显示它的问题直到今天才困扰我。今天我试图解决它。

我猜我必须到处使用 utf-8,所以我从

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

现在我的页面显示问题而不是西里尔符号,并且在我的数据库中显示西里尔文本的问题没有解决。谁能告诉我是什么问题?PS 我可以毫无问题地阅读塞尔维亚语和白俄罗斯语(西里尔语)网站,并且可以在我的本地主机上输入西里尔语文本。

谢谢你。

4

1 回答 1

2

phpMyAdmin 的问题可能是由错误的字符编码猜测引起的。如果您Барысаў2000使用 charset对文本进行编码,windows 1251您最终会得到一个字节流C1 E0 F0 FB F1 E0 A2 32 30 30 30 0D 0A。如果将此字节流解释为采用 ISO-8859-1 或 windows-1252 编码的文本,则结果显示为Áàðûñà¢2000

这表明数据库中的字符串实际上是使用 windows-1251 编码存储的。然后,如果您输出这些字符串并仅声明它使用 UTF-8 编码(不进行任何重新编码),则结果将是垃圾文本,因为该字节流包含无效的 UTF-8 字节序列。

您应该继续使用 windows-1251 字符集为您的页面提供服务,并告诉 phpMyAdmin 也使用此字符集,或者您应该在任何地方(也在内部,在数据库中)切换到 unicode。字符转换和猜测所需的正确编码越少,维护系统就越容易。

于 2011-11-24T13:51:03.137 回答