好吧……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方法+转义危险符号用于将用户文本保存到db中)。
但是,当您选择该数据并将其显示在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"/>


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

谢谢。

最佳答案

phpMyAdmin的问题可能是由错误的字符编码猜测引起的。如果使用字符集Барысаў2000对文本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。字符转换次数越少,猜到所需的正确编码,维护系统就越容易。

关于mysql - 如果包含charset = windows-1251,但不包含utf-8,则html页显示西里尔符号OK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8237866/

10-10 18:17