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

发布于 2024-10-12 08:54:31 字数 230 浏览 4 评论 0原文

我正在解析来自大约 100 个不同域的 HTML。我可以检查每个域使用的编码&那样做事情,但这似乎很愚蠢。

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

是的,我也使用 DOMDocument 类来查找我想要的内容。这一切都很好。除了编码之外。

I am parsing HTML from ~100 different domains. I could check what encoding each domain uses & do things that way, but that seems dumb.

Usually the encoding is in the header tags yeah? but not always I gather. so I may need to run some regex? or use some mb_ functions. Or perhaps use cURL? All the examples I've found so far are for XML & now I've got a headache.

Yes also I am using the DOMDocument class to find what I want. And that is all working great. Except for the encoding.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笑梦风尘 2024-10-19 08:54:31

根据 W3C 国际化标准,您应该遵循这些优先级,以便获取 HTML/XML 文档的编码:

  • Content-Type 标头(来自 HTTP 响应)
  • XML 或 XHTML 声明,例如:
  • meta 标记与 http-equiv="Content-Type" (来自 HTML 标头)

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

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

According to the W3C internationalization standards, you should follow these priorities in order to get the encoding of an HTML/XML document:

  • Content-Type header (from the HTTP response)
  • XML or XHTML declaration, e.g.: <?xml version="1.0" encoding="utf-8" ?>
  • meta tag with http-equiv="Content-Type" (from the HTML header)

In my experience, when all that fails, you can assume encoding is most probably ISO-8859-1 or CP1252. You can decode content using the iconv library, e.g.: iconv("UTF-8", "ISO-8859-1", $content).

If you use the cURL library to fetch the URLs, you can get the Content Type header with: curl_getinfo($ch, CURLINFO_CONTENT_TYPE). The other tags can be extracted with an XML/HTML parser.

近箐 2024-10-19 08:54:31

您可以解析元标记,任何负责任的程序员都应将其包含在 元素中。

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

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

You can parse a meta tag which any responsible programmer should have included in the <head> element.

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

You can also choose to reject any html which does not have the charset in the header or in a meta tag.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文