【问题标题】:html_entity_decode(): charset `ASCII' not supportedhtml_entity_decode():不支持字符集“ASCII”
【发布时间】:2017-06-15 15:12:17
【问题描述】:

我的 php.log(PHP 错误日志)每天都被以下行填满:

PHP 警告:html_entity_decode():不支持字符集 ASCII,假设第 149 行 /....php 中的 iso-8859-1

第 149 行如下所示:

$html = html_entity_decode($html, ENT_QUOTES, mb_detect_encoding($html));

html_entity_decode() 的用法是根据 php.net 的,所以我缺少什么?

【问题讨论】:

    标签: php warnings


    【解决方案1】:

    您理所当然地认为mb_detect_encoding() 是一种用于确定文本使用何种编码的工具。事实上并非如此。自动编码检测是不可能完成的,这个功能甚至没有尝试。

    你得到了ASCII。然后要求 PHP 将 HTML 实体解码为 US-ASCII。 由于好的老式 7 位 US-ASCII 几乎无法存储大约一百个可打印字符,这几乎是一项不可能完成的任务。

    判断HTML编码的正确方法是:

    1. Web 服务器的 Content-Type 标头(如果有):

      Content-Type: text/html; charset=UTF-8
      
    2. HTML 元标记,否则:

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

    【讨论】:

    • 谢谢。但是,为了避免这个错误,我应该对现有代码做些什么呢?这是一个旧项目,我想尽可能少地改变它。这是个好主意吗:$code = (mb_detect_encoding($html) == 'ASCII') ? 'UTF-8' : mb_detect_encoding($html); $html = html_entity_decode($html, ENT_QUOTES, $code);
    • 您真的点击了mb_detect_encoding() 手册页的链接吗?在大多数系统中,它只会返回 ASCII 或 UTF-8 (demo),因此您基本上会以非常复杂的方式对 UTF-8 进行硬编码。这个问题缺乏所有上下文,我不能说$html 是什么或来自什么,我不知道你为什么需要以这种方式检测编码。
    • $html 是来自网站的一篇文章,它正在被解码和解析(从标签中修剪以制作一个 xml rss 文件)。可悲的是,我真的不明白那个解决方案。
    • 计算机是只能理解 1 和 0 的数字设备(让我们这么说吧)。如果您只有00010111,则无法说明它使用的是什么编码——它可能是任何编码。这就是网站实际声明它们使用的编码的原因,因此您无需猜测。
    猜你喜欢
    • 2021-10-27
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2018-01-12
    • 2012-04-13
    • 1970-01-01
    相关资源
    最近更新 更多