确定/转换外部HTML文件编码的最佳方法是什么?

时间:2011-01-18 00:53:30

标签: php encoding curl html-parsing domdocument

我正在从大约100个不同的域解析HTML。我可以检查每个域使用的编码和&做那样的事,但这看起来很蠢。

通常编码是在标题标签中是吗?但并不总是我聚集在一起。所以我可能需要运行一些正则表达式?或者使用一些mb_函数。或者也许使用cURL?到目前为止,我发现的所有例子都是针对XML&现在我头疼了。

是的我也在使用DOMDocument类来查找我想要的内容。这一切都很有效。除了编码。

2 个答案:

答案 0 :(得分:0)

您可以解析任何负责任的程序员应该包含在<head>元素中的元标记。

<meta http-equiv="content-type" 
        content="text/html;charset=utf-8" />

您也可以选择拒绝标题或元标记中没有字符集的任何html。

答案 1 :(得分:0)

根据W3C internationalization standards,您应该遵循这些优先级,以获得HTML / XML文档的编码:

  • Content-Type标头(来自HTTP响应)
  • XML或XHTML声明,例如:<?xml version="1.0" encoding="utf-8" ?>
  • meta标记http-equiv="Content-Type"(来自HTML标题)

根据我的经验,当所有失败时,您可以假设编码很可能是ISO-8859-1或CP1252。您可以使用iconv库解码内容,例如:iconv("UTF-8", "ISO-8859-1", $content)

如果您使用cURL库来获取网址,则可以使用以下网址获取内容类型标头:curl_getinfo($ch, CURLINFO_CONTENT_TYPE)。可以使用XML / HTML解析器提取其他标记。