我的页面经常显示诸如ë, Ã, ì, ù, Ã等内容,以取代正常字符。
我在标题页和MySQL编码中使用utf8。这种情况是如何发生的?
这些是utf-8编码的字符。使用utf8_decode()将它们转换为正常的ISO-8859-1字符。
如果你看到这些字符,你可能只是没有正确指定字符编码。因为这些字符是UTF-8多字节字符串被解释为ISO 8859-1或Windows-1252等单字节编码时的结果。
在这种情况下,ë
可以用0xC3 0xAB进行编码,在UTF-8中代表Unicode字符ë
(U+00EB)。
尽管 "utf8_decode "是一个有用的解决方案,但我更倾向于纠正表本身的编码错误。在我看来,纠正坏字符本身比在代码中做"黑客"更好。只需在表中的字段上做一个replace
。为了纠正OP中的不良编码字符。
update <table> set <field> = replace(<field>, "ë", "ë")
update <table> set <field> = replace(<field>, "Ã", "à")
update <table> set <field> = replace(<field>, "ì", "ì")
update <table> set <field> = replace(<field>, "ù", "ù")
其中<table>
是mysql表的名称,<field>
是表中的列的名称。这里有一个非常好的检查表,用于检查那些典型的不良编码的windows-1252到utf-8字符-> 调试图,将windows-1252字符映射到UTF-8字节到Latin-1字符。
记得在尝试用SQL替换任何字符之前,先备份你的表!
[我知道这是一个非常老的问题的答案,但我又一次面临这个问题。一些旧的windows机器在插入utf8_general_ci整理表之前没有对文本进行正确编码。]