2017-06-15 153 views
1

我有我的php.log(日志为PHP错误)每天都有充满了以下行:html_entity_decode():字符集'ASCII”不支持

PHP的警告:html_entity_decode() :

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

html_entity_decode()的使用是根据PHP:不支持ASCII字符集,假设ISO-8859-1在/....php线149

线#149像看起来。净,所以我错过了什么?

回答

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标签:

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

谢谢。然而,为了躲避这个错误,我应该怎样做才能使用现有的代码呢?这是一个旧项目,我想尽可能少地改变它。会不会是一个好主意:'$ code =(mb_detect_encoding($ html)=='ASCII')? 'UTF-8':mb_detect_encoding($ html); $ html = html_entity_decode($ html,ENT_QUOTES,$ code);' – user7808407

+0

你真的按照mb_detect_encoding()'手册页的链接吗?在大多数系统中,它只会返回'ASCII'或'UTF-8'([demo](https://3v4l.org/c3WoM)),所以你基本上是在真正地编码UTF-8错综复杂的方式。问题是缺乏所有的上下文,我不能说什么'$ html'是或来自,我不知道你为什么需要检测编码的方式。 –

+0

$ html是一个正在被解码和解析的网站文章(从标签修剪成一个xml rss文件)。可悲的是,我真的不明白解决方案。 – user7808407