php - 俄语、葡萄牙语等文本编码错误

标签 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"); 

如果您在元标记和 header 上浪费了太多时间,请试一试此解决方案。

最佳答案

不要使用 mysql_*界面;切换到 mysqli_* .

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

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

meta标签很好; SET NAMES utf8是需要的。

但您可能在表中存储了垃圾。那么,让我们看一下表格:SELECT col, hex(col) FROM tbl...

对于 Фил , 你应该看到 D0A4D0B8D0BB 的十六进制.如果你看到 C390C2A4C390C2B8C390C2BB ,你有“双重编码”。相反,您似乎以某种方式获得了“unicode”而不是“utf8”,并且可能来自您开始使用的“latin1”。注意如何 D0 A4 D0 B8 D0 BB出现在我的十六进制和你的 \u00d0... 中?

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

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

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

关于php - 俄语、葡萄牙语等文本编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35155990/

相关文章:

PHP:使用 levenshtein 距离来匹配单词

php - 想要在类中创建一个函数返回表的所有行

php - MySQL——跟踪用户的帖子

php - 如何修复 laravel Seed 中的 UTF8?

Ruby Thin/Rack 奇怪的多字节字符行为

php - Laravel - 对具有两个文本列的表进行 Mysql 操作花费太多时间

php - 安全 token 流程

python - 如何使用python读取从网络复制到txt文件的文本

php - 使用javascript或jquery按下按钮时在文本区域中插入图像?

mysql - 论坛软件应该根据审核直接删除主题/帖子还是简单地隐藏?