我的php.log(PHP错误日志)每天都填满以下一行:
PHP警告:html_entity_decode():不支持charset ASCII,假设第149行的/....php中有iso-8859-1
第149行看起来像:
$html = html_entity_decode($html, ENT_QUOTES, mb_detect_encoding($html));
html_entity_decode()
的用法是根据php.net,所以我错过了什么?
答案 0 :(得分:1)
您理所当然地认为mb_detect_encoding()是一种工具,可以确定文本使用的编码方式。事实上并非如此。完成自动编码检测是不可能的,而且该功能甚至都没有尝试。
你得到了ASCII
。然后要求PHP将HTML实体解码为US-ASCII。
由于好的旧7位US-ASCII几乎不能存储大约一百个可打印的字符,这大部分都是不可能完成的任务。
确定HTML编码的正确方法是:
Web服务器的Content-Type
标头(如果有):
Content-Type: text/html; charset=UTF-8
否则为HTML元标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8">