不少人都觉得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 ,不然可能乱码。