一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

htmlspecialchars 和 htmlentities 的区别分析

时间:2011-07-06 编辑:简简单单 来源:一聚教程网

htmlspecialchars 和 htmlentities 的区别分析

htmlentities() 函数把字符转换为 HTML 实体。

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >

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代码,连同里面的它无法识别的中文字符也给转化了。

例子


php教程
$str = "John & 'Adams'";
echo htmlentities($str, ENT_COMPAT);
echo "
";
echo htmlentities($str, ENT_QUOTES);
echo "
";
echo htmlentities($str, ENT_NOQUOTES);
?>

浏览器输出:

John & 'Adams'
John & 'Adams'
John & 'Adams'如果在浏览器中查看源代码,会看到这些 HTML:



John & 'Adams'

John & 'Adams'

John & 'Adams'

我们可以拿一个简单的例子来做比较:

$str='测试页面';
echo htmlentities($str);
// <a href="test.html">²âÊÔÒ³Ãæ</a>
 
$str='测试页面';
echo htmlspecialchars($str);
// <a href="test.html">测试页面</a>
结论是,有中文的时候,最好用 htmlspecialchars ,否则可能乱码



$str = "John & 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "
";
echo htmlspecialchars($str, ENT_QUOTES);
echo "
";
echo htmlspecialchars($str, ENT_NOQUOTES);
?>

浏览器输出:

John www.111com.net & 'Adams'
John & 'Adams'
John & 'Adams'如果在浏览器中查看源代码,会看到这些 HTML:



John www.111com.net & 'Adams'

John & 'Adams'

John & 'Adams'

另外参考一下这个自定义函数

function my_excerpt( $html, $len ) {
    // $html 应包含一个 HTML 文档。
    // 本例将去掉 HTML 标记,网页特效 代码
    // 和空白字符。还会将一些通用的
    // HTML 实体转换成相应的文本。
    $search = array ("']*?>.*?'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) : '';
}

热门栏目