萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> htmlspecialchars 和 htmlentities 的區別分析

htmlspecialchars 和 htmlentities 的區別分析

htmlspecialchars 和 htmlentities 的區別分析

htmlentities() 函數把字符轉換為 HTML 實體。

htmlspecialchars() 函數把一些預定義的字符轉換為 HTML 實體。

預定義的字符是:

& (和號) 成為 &
" (雙引號) 成為 "
' (單引號) 成為 '
< (小於) 成為 &lt;
> (大於) 成為 &gt;

The translations performed are:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'
htmlspecialchars 只轉化上面這幾個html代碼,而 htmlentities 卻會轉化所有的html代碼,連同裡面的它無法識別的中文字符也給轉化了。

例子
<html>
<body>
<?php教程
$str = "John & 'Adams'";
echo htmlentities($str, ENT_COMPAT);
echo "<br />";
echo htmlentities($str, ENT_QUOTES);
echo "<br />";
echo htmlentities($str, ENT_NOQUOTES);
?>
</body>
</html>浏覽器輸出:

John & 'Adams'
John & 'Adams'
John & 'Adams'如果在浏覽器中查看源代碼,會看到這些 HTML:

<html>
<body>
John &amp; 'Adams'<br />
John &amp; &#039;Adams&#039;<br />
John &amp; 'Adams'
</body>
</html>

我們可以拿一個簡單的例子來做比較:

$str='<a href="test.html">測試頁面</a>';
echo htmlentities($str);
// &lt;a href=&quot;test.html&quot;&gt;&sup2;&acirc;&Ecirc;&Ocirc;&Ograve;&sup3;&Atilde;&aelig;&lt;/a&gt;
 
$str='<a href="test.html">測試頁面</a>';
echo htmlspecialchars($str);
// &lt;a href=&quot;test.html&quot;&gt;測試頁面&lt;/a&gt;
結論是,有中文的時候,最好用 htmlspecialchars ,否則可能亂碼

<html>
<body>
<?php
$str = "John & 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "<br />";
echo htmlspecialchars($str, ENT_QUOTES);
echo "<br />";
echo htmlspecialchars($str, ENT_NOQUOTES);
?>
</body>
</html>浏覽器輸出:

John www.111cn.net & 'Adams'
John & 'Adams'
John & 'Adams'如果在浏覽器中查看源代碼,會看到這些 HTML:

<html>
<body>
John www.111cn.net &amp; 'Adams'<br />
John &amp; &#039;Adams&#039;<br />
John &amp; 'Adams'
</body>
</html>

另外參考一下這個自定義函數

function my_excerpt( $html, $len ) {
    // $html 應包含一個 HTML 文檔。
    // 本例將去掉 HTML 標記,網頁特效 代碼
    // 和空白字符。還會將一些通用的
    // HTML 實體轉換成相應的文本。
    $search = array ("'<script[^>]*?>.*?</script>'si",  // 去掉 javascript
                    "'<[/!]*?[^<>]*?>'si",           // 去掉 HTML 標記
                    "'([rn])[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) : '';
}

copyright © 萬盛學電腦網 all rights reserved