原文出處
很多人都以為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 '<'
- '>' (greater than) becomes '>'
可以了解到htmlspecialchars只轉化上面這幾個html代碼,而htmlentities卻會轉化所有的html代碼,連同裡面的它無法識別的中文字符也給轉化了。
沒有留言:
張貼留言