不少人都覺得htmlentities跟htmlspecialchars的功能是同樣的,都是格式化html代碼的,我之前也曾這麼認爲,可是今天我發現並非這樣的。 javascript
The translations performed are: 代碼以下: php
'&' (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代碼,連同裏面的它沒法識別的中文字符也給轉化了。
$str='<a href="test.html">測試頁面</a>'; echo htmlentities($str); // <a href="test.html">²âÊÔÒ³Ãæ</a> $str='<a href="test.html">測試頁面</a>'; echo htmlspecialchars($str); // <a href="test.html">測試頁面</a>結論是,有中文的時候,最好用 htmlspecialchars ,不然可能亂碼
function my_excerpt( $html, $len ) { // $html 應包含一個 HTML 文檔。 // 本例將去掉 HTML 標記,javascript 代碼 // 和空白字符。還會將一些通用的 // HTML 實體轉換成相應的文本。 $search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 javascript "'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 標記 "'([\r\n])[\s]+'", // 去掉空白字符 "'&(quot|#34);'i", // 替換 HTML 實體 "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", "'&(nbsp|#160);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e"); // 做爲 PHP 代碼運行 $replace = array ("", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), "chr(\\1)"); $text = preg_replace ($search, $replace, $html); $text = trim($text); return mb_strlen($text) >= $len ? mb_substr($text, 0, $len) : ''; }htmlspecialchar()函數和htmlentities()函數相似都是把html代碼轉換,htmlspecialchars_decode是把轉化的html的編碼轉換成轉換回來。
$str='<a href="test.html">測試</a>'; $transstr = htmlspecialchars($str) ; echo $transstr . "<br />"; echo htmlspecialchars_decode($transstr)";運行上面的代碼,就能夠看出二者的差異了。
‘&' (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 ‘>'這部分無可厚非,可是第二部分的解釋卻並不怎麼正確:
<?php $str='<a href="test.html">測試頁面</a>'; echo htmlentities($str); // <a href="test.html">²âÊÔÒ³Ãæ</a> $str='<a href="test.html">測試頁面</a>'; echo htmlspecialchars($str); // <a href="test.html">測試頁面</a> ?>結論是,有中文的時候,最好用 htmlspecialchars ,不然可能亂碼。