【发布时间】:2011-09-19 04:20:36
【问题描述】:
我遇到了一些我无法弄清楚的令人讨厌的字符编码问题。
基本上,我正在使用 PHP 从网站上抓取一些 HTML,然后通过 PHP 的 DOMDocument 运行它以更改一些 URL 等,完成后,它会输出带有一些奇怪内容的 HTML。例如:应该有结束引号的地方,它会输出”
我将页面的字符集元标记设置为utf-8,但随后” 字符在网站上显示为â€。我不确定是我不懂字符编码还是什么。
关于解决此问题的最佳方法有什么建议吗?带有元标记的客户端,或某种服务器端 PHP 转换?
【问题讨论】:
-
请显示用于加载 HTML 页面的代码。 DOMDocument 不检测编码本身。在您的情况下,
$dom = new DOMDocument('1.0', 'utf-8');可能会有所帮助。或者一些other workaround. -
原始字符是 U+201D RIGHT DOUBLE QUOTATION MARK (
”),在 UTF-8 中编码为“\xE2\x80\x9D”,被误解为 Latin-1,并且错误的 HTML-编码。 -
我实际上发现了问题所在。我通过两个不同的 DOM 实例运行它,当我将它从一个导出到第二个时,它变得一团糟。重新安排我的代码只使用一个 DOM 实例,它解决了问题。
-
Zend 开发者 --- new Zend_Mail("utf-8")
标签: php utf-8 character-encoding screen-scraping domdocument