【问题标题】:UTF8 encoded strings not shown correctly in MySQLUTF8 编码的字符串在 MySQL 中未正确显示
【发布时间】:2012-09-26 18:19:42
【问题描述】:

所以我编写了一个爬虫程序,用 utf8 字符集从网站上抓取信息和数据。但是当我尝试将内容存储到 MySQL 中时,一些特殊字符(例如西班牙字母)在 MySQL 中没有正确显示。

这是我所做的:

  1. header("Content-Type: text/html; charset=utf-8")放到PHP中
  2. 将 MySQL 中的所有字符集设置为 utf8-unicode-ci
  3. 连接时有$conn->query("SET NAMES 'utf8'")这个
  4. 仔细检查我解析的 html 是用 utf-8 编码的

那么这里有哪些潜在的问题?

【问题讨论】:

    标签: php mysql html character-encoding


    【解决方案1】:

    也许您使用不应管理多字节字符的函数编写爬虫代码。
    例如 strlen 而不是 mb_strlen。

    试试看:

    mb_internal_encoding("UTF-8");
    

    作为你的 php coce 的第一行,然后检查你是否必须在它们各自的 mb 版本中转换一些函数。 看看multibyte string reference

    作为最后的机会,您可以在将字符串插入 mysql 之前使用iconv function
    比如:

    $utf8_string = iconv(iconv_get_encoding($string), "UTF-8", $string);
    

    应该做的伎俩

    【讨论】:

    • @DanielZuo 很高兴回馈网络 :)
    【解决方案2】:

    首先检查数据库中的数据是否存储错误,在这种情况下,问题出在您的爬虫上。否则问题出在您的演示文稿中。

    为了测试这一点,我建议您使用专用的 mysql 客户端(例如命令行客户端)来检查数据。

    【讨论】:

    • 嗨 troelskn,我的爬虫使用 cURL 提取数据并使用 PHP DOM 解析它。数据存储也非常简单。
    • @DanielZuo troelskn 给你的建议非常好。您的解决方案是否简单并不重要,重要的是查看数据是否存储正确以确定问题所在。
    【解决方案3】:

    我记得在我开始将它添加到我的标题之前,我一直在处理 UTF8 问题:

    setlocale(LC_ALL, 'en_US.UTF-8');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 2013-10-26
      • 1970-01-01
      • 2013-05-15
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      相关资源
      最近更新 更多