MySQL数据库中的乱码文本

时间:2012-02-08 14:07:45

标签: php mysql sql

我有一个名为“tweets”的数据库表。我使用Twitter Search API下载了推文。根据MySQL的建议,数据库表排序规则设置为latin1_swedish_ci,因为它至少支持Enlish语言(我在某个地方的MySQL支持页面上读过这个)。

无论如何,我现在看到很多推文看起来像这样:

$S&P news: Bank of America’s Mortgage-Bond Accord http://bit.ly/oTXC5a
@LucciAlerts >> $BAC from a pincher play setup
ë¯¸êµ­ì‹ ìš©ë“±ê¸‰ì´ë–¨ì–´ì¡Œë„¤ RT @CNBC  RT @alexcrippen: S&P affirms AA+
  • 我相信&可以通过使用(PHP)htmlspecialchars_decode()将它们转换为原始字符来修复喜欢的内容;
  • 但我不知道如何修复“America’s”,例如。显然,â™应该是一个叛逆者('),但我该如何取回它?
  • 最后,有些人喜欢在他们的推文中加入各种ASCII字符(星星,“真正的”表情而不是表情符号)。那些被存储为“미êμì<ìš©ë” - 급ì'ë-¨ì-쓤”¤“,如上所述。有没有办法解决这个问题,如果有,怎么做?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

这看起来像iso-8859中的utf-8双重编码。我已经看过很多次了,但是从来没有像这样说过。

修复您的应用

要保存从twitter API收到的所有特殊字符,您的数据库应该是utf8排序规则,而不是latin1。使用latin1_swedish_ci是一个非常糟糕的建议。

此外,您的PHP应用程序的数据库连接可能未正确设置为使用utf8。

请在此处阅读:http://www.php.net/manual/en/function.mysql-set-charset.php PHP手册中的注释总是值得一读。

如果你使用zend或其他库,通常有一种支持的方法告诉PDO或任何数据库层在db连接中使用utf8。

如果可以,请删除所有内容,并在转换整理和客户端字符集tu utf8后再次开始填充数据库。

修复数据

如果您无法删除所有内容,则必须直接在数据库中修复双重或三重编码utf8字符串的ascii表示。

“修复”这个数据是一项复杂的任务。最简单的方法是使用latin1 collat​​ion数据库连接检索它的转储并使用utf-8数据库连接将其写回。 但在您的情况下,数据似乎是UTF-8中的三重或四重编码。

请在此处阅读:http://blog.hno3.org/2010/04/22/fixing-double-encoded-utf-8-data-in-mysql/

普罗蒂普: 在开始使用数据存储之前,将它的两个转储放在一边。一个使用iso8859客户端字符集,另一个使用utf8客户端字符集。

现在您可以尝试修复它。在执行链接博客文章中描述的过程之前,还尝试使用mysql CONVERT将数据库表转换为UTF8。