正确的字符编码显示“—?

时间:2011-06-21 03:09:49

标签: php utf-8 character-encoding screen-scraping domdocument

我遇到了一些令人讨厌的字符编码问题,我无法弄明白。

基本上,我是使用PHP从网站上抓取一些HTML,然后通过PHP的DOMDocument运行它来更改一些URL等等,当它完成后,它会输出一些奇怪的东西。例如:应该有一个结束引用,它会发出”

我将charset的页面元标记设置为utf-8,但”个字符在网站上显示为â€。我不确定我是不是不理解字符编码,或者是什么。

有关解决此问题的最佳方法的任何建议吗?客户端是否有元标记或某种服务器端PHP转换?

2 个答案:

答案 0 :(得分:2)

有时在HTML或响应标头中设置charset是不够的。如果您的服务器上没有为UTF-8设置所有内容,那么您的文本可能会在整个过程中被错误地转换。您可能需要在其配置文件中为Apache和PHP启用UTF-8编码。 (如果您不使用Apache,请尝试跳过该步骤。)

Apache UTF-8设置:

编辑 charset.conf (理想)或 httpd.conf 文件,将此行添加到结尾:

AddDefaultCharset utf-8

(如果您无法访问Apache的配置文件,则可以在HTML'中创建" .htaccess "文件。使用相同代码的根目录。)

PHP UTF-8设置:

编辑您的php.ini文件,搜索" default_charset ",并将其更改为:

default_charset = "utf-8"

重启Apache:

根据您的服务器类型,此命令可以通过命令行执行此操作:

sudo service apache2 restart

答案 1 :(得分:0)

我认为您应该链接/发布您遇到问题的页面(部分内容)和部分代码以获得更好的反馈。

一些建议:尝试将您获得的页面字符串,从其元标记中指定的编码(或实际文档编码,如果不是这种情况)转换为UTF-8和/或强制DOMDocument对象中的文档编码(as〜mario描述或使用属性)因为DOMDocument似乎只在HTML头标记中首先使用编码元标记才能正确使用。

您还可以尝试禁用entities conversion或其他一些属性,因为您不需要它来进行简单的URL更改。