我遇到了一些令人讨厌的字符编码问题,我无法弄明白。
基本上,我是使用PHP从网站上抓取一些HTML,然后通过PHP的DOMDocument运行它来更改一些URL等等,当它完成后,它会输出一些奇怪的东西。例如:应该有一个结束引用,它会发出”
我将charset的页面元标记设置为utf-8
,但”
个字符在网站上显示为â€
。我不确定我是不是不理解字符编码,或者是什么。
有关解决此问题的最佳方法的任何建议吗?客户端是否有元标记或某种服务器端PHP转换?
答案 0 :(得分:2)
有时在HTML或响应标头中设置charset是不够的。如果您的服务器上没有为UTF-8设置所有内容,那么您的文本可能会在整个过程中被错误地转换。您可能需要在其配置文件中为Apache和PHP启用UTF-8编码。 (如果您不使用Apache,请尝试跳过该步骤。)
编辑 charset.conf (理想)或 httpd.conf 文件,将此行添加到结尾:
AddDefaultCharset utf-8
(如果您无法访问Apache的配置文件,则可以在HTML'中创建" .htaccess "文件。使用相同代码的根目录。)
编辑您的php.ini文件,搜索" default_charset ",并将其更改为:
default_charset = "utf-8"
根据您的服务器类型,此命令可以通过命令行执行此操作:
sudo service apache2 restart
答案 1 :(得分:0)
我认为您应该链接/发布您遇到问题的页面(部分内容)和部分代码以获得更好的反馈。
一些建议:尝试将您获得的页面字符串,从其元标记中指定的编码(或实际文档编码,如果不是这种情况)转换为UTF-8和/或强制DOMDocument对象中的文档编码(as〜mario描述或使用属性)因为DOMDocument似乎只在HTML头标记中首先使用编码元标记才能正确使用。
您还可以尝试禁用entities conversion或其他一些属性,因为您不需要它来进行简单的URL更改。