Firefox中奇怪的字符编码

时间:2012-01-26 11:53:39

标签: php html

我在Firefox中遇到字符编码问题。当我从Microsoft Word(2007)复制/粘贴一个段落时,它可能包含这样的特殊字符(用于制作列表或引号的点/方块):

   Te’st
   Ze’f
•   Gzg’a

引用与此引用'(使用键盘直接键入)相比有所不同。所以我将它粘贴到textarea并保存(在某些情况下使用AJAX)。在数据库(具有整理latin1_swedish_ci)中,它显示完全正常。但是当使用Firefox再次编辑这些数据时,它会显示奇怪的二进制符号。适用于Chrome和IE。

我不想修改数据库的charset。有没有办法解决这个问题?

注意:您还可以通过在Chrome和FF中查看此帖子进行测试

1 个答案:

答案 0 :(得分:0)

您复制的字符(假设它们被正确传输到此论坛中)除了字母之外还包含三次出现的U + 2019 RIGHT SINGLE QUOTATION MARK,这是英语和许多其他语言中正确的标点符号撇号,一次出现U + 2022 BULLET,听起来不错,两次出现U + F0A7,属于私人使用(PU)范围,不应用于公共信息交换,仅用于特殊目的,有关各方之间的相互协议。

Word 2007文档中的某些符号可能会在复制和粘贴时转换为PU字符,但至少正常的列表项目通常会变为U + 2022 BULLET。所以PU字符的来源有点神秘。

关于单引号,它们也可以在windows-1252中表示,latin1_swedish_ci似乎覆盖它(尽管据我所知,它只是整理顺序的定义,而不是字符编码) 。正如您所说,数据在数据库中看起来很好,似乎问题在于将数据写入提供给浏览器的HTML文档中。

特别是,如果随后呈现数据的页面的编码是UTF-8,并且实际数据存在于windows-1252编码中,则会出现问题。这将意味着你所描述的问题,因为U + 2019在windows-1252中被编码为0x92,这在解释为UTF-8时会导致字符级数据错误。

您可以在查看结果页面时使用“查看”→“在Firefox中编码”来查看情况。如果我的假设是正确的,你会看到在那里选择UTF-8,并将其改为“西欧(windows-1252)”会使单引号出现(并且可能会彻底弄乱页面上的其他内容)。