【问题标题】:PHP convert string from windows-1250 to utf-8PHP 将字符串从 windows-1250 转换为 utf-8
【发布时间】:2011-05-15 17:32:29
【问题描述】:

我正在抓取 windows-1250 网站(meta http-equiv="Content-Type" content="text/html; charset=windows-1250")。

由于我的数据库是utf-8,所以需要将数据转换成utf-8。

对于那项工作,我尝试了 iconv('windows-1250', 'UTF-8', $s);它给出了“ÄŚarls”而不是“Čarls”。

当编码切换位置时,​​它会提供更好的结果 iconv('UTF-8', 'windows-1250', $s);给出 "Èarls" 而不是 "Čarls".奇怪。

您知道如何将其转换为 utf-8 吗?

提前致谢。

【问题讨论】:

  • 您是否 1000% 确定您抓取的网站是 windows-1250?你能确定在浏览器中(看看它切换到哪种编码)?你的输出编码是什么?
  • 如何指定输出的字符编码?
  • 当你说“给予”时,你到底是什么意思?您能否将数据库排除在等式之外并尝试从您的 PHP 代码打印转换后的结果,您自己的页面编码为 UTF-8?还是您已经这样做了?
  • 当我说给,我的意思是写在数据库中(这对我来说最重要)。打印在 utf-8 页面上,它给出 "ÄŚarls" iconv('windows-1250', 'UTF-8', $s) 或 "�arls" (iconv('UTF-8', 'windows-1250', $s ))。我希望“Čarls”来自原始抓取的网站。
  • @umpirsky - 必须忽略某些区域,例如您如何查看 mysql 的结果? show variables like '%char%' 返回是什么?

标签: php encoding utf-8 web-crawler


【解决方案1】:

各位,真的很抱歉。这是数据库问题。 $connection->setCharset('UTF8');修复。没有iconv,没有mbstring。

我非常确定我需要转换字符集,我忘了检查它是否可以在没有转换的 uft8 页面上工作。

感谢所有cmets。

【讨论】:

  • 至少你把它修好了(最后)
【解决方案2】:

我建议首先验证正确的数据是否到达 iconv(以及类似地从 iconv 输出的数据)。

使用echo bin2hex($string) 之类的语句并在iconv 之前查看$s 的字节流。如果你有你认为你有第一个字节的字符串应该是c8。如果然后查看 iconv 之后的字节流,第一个字节应该是c48c(在 UTF-8 中);如果您转换为 UCS-2,您会看到 010c,您将看到 see 是 unicode 中的相关字符。

根据此结果,您将知道您的问题是否在于收集数据(即您没有看到 c8)、您的 iconv 安装(即转换产生错误的结果)或将该数据放入您的数据库(即iconv的结果和预期的一样)。

【讨论】:

    猜你喜欢
    • 2018-09-30
    • 2016-08-14
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多