俄语,葡萄牙语等文本编码错误

时间:2016-02-02 14:23:13

标签: php mysql utf-8 collation

我有一个表格,我存储了一些文字标签。最初它是使用latin_swedish_ci(默认)排序规则构建的。

现在我需要支持其他语言,比如俄语。我有两个消耗这些标签的页面。一个显示它们很好,尽管表仍然是拉丁校对而不是utf8_generic_ci,但是另一个页面仍然显示垃圾。当我查看源代码时,它看起来像这样:

\ u00d0 \ u00a4 \ u00d0 \ u00b8 \ u00d0 \ u00bb \ u00d1 \ u0152 \ u00d1 \ u201a \ u00d1 \ u20ac \

两个页面都有:

 <META http-equiv="Content-type" content="text/html;charset=UTF-8">

我错过了什么?

更新:

我不知道为什么以及它是如何工作的,但我最终在我的查询插入/更新之前和在页面上呈现之前添加了以下内容并修复了我的所有问题:

mysql_query("SET NAMES utf8"); 

如果你太浪费时间尝试元标记和标题,请给这个解决方案一个旋转。

1 个答案:

答案 0 :(得分:0)

使用mysql_*界面;切换到mysqli_*

你可能想要像Фил...这样的东西?

要弄得一团糟,可能有两个错误。

meta标签很好;需要SET NAMES utf8

但是你可能已经在桌面上存放了垃圾。所以,让我们看一下表:SELECT col, hex(col) FROM tbl...

对于Фил,您应该看到D0A4D0B8D0BB的十六进制。如果您看到C390C2A4C390C2B8C390C2BB,则您有&#34;双重编码&#34;。相反,似乎你得到了&#34; unicode&#34;而不是&#34; utf8&#34;,可能来自&#34; latin1&#34;你开始了。请注意D0 A4 D0 B8 D0 BB在我的十六进制和\u00d0...

中的显示方式

如果你可以重新开始,那就这样做:

  • 客户端中的utf8编码
  • SET NAMES utf8
  • 列/表上的
  • CHARACTER SET utf8
  • <meta charset=UTF-8>

如果你无法重新开始,那么我们会看到SELECT我要求的; 也许我可以找到一种方法来挽救你的数据。