2009/08/05

PHP中 htmlentities 跟 htmlspecialchars 的區別

(撰寫於 2009-01-13 )

原文出處

很多人都以為htmlentities跟htmlspecialchars的功能是一樣的,都是格式化html代碼的,我以前也曾這麼認為,但是今天我發現並不是這樣的。


這兩個函數在格式化帶有英文字符的html代碼的時候基本沒啥問題, 但是htmlentities對中文字符也不放過,這樣得出來的結果是中文字符部分變為一堆亂碼。

當時做英文站的時候根本就沒覺察到這個問題, 而今天公司的一個收藏站卻因為有有非英文字符而出現了問題, 我最終查出來是 htmlentities這個函數的問題, 同時我也找到了htmlspecialchars這個函數。

對于這兩個函數, php手冊上都是英文做的解釋,其中在htmlentities函數的說明部分有這麼一段英文:

This function is identical to htmlspecialchars() in all ways, except with htmlentities(), all characters which have HTML character entity equivalents are translated into these entities.

從這句話中我們也可以看出來這兩個函數雖然基本功能差不多,但是還是有細微的差別在裡面的。

再仔細看htmlspecialchars函數裡面的一段話:

The translations performed are:
  • '&' (ampersand) becomes '&'
  • '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
  • ''' (single quote) becomes ''' only when ENT_QUOTES is set.
  • '<' (less than) becomes '&lt;'
  • '>' (greater than) becomes '&gt;'


可以了解到htmlspecialchars只轉化上面這幾個html代碼,而htmlentities卻會轉化所有的html代碼,連同裡面的它無法識別的中文字符也給轉化了。

沒有留言:

張貼留言