2017-06-15 151 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