首页 > 学习笔记 > htmlspecialchars 和 htmlentities 的区别
2010
07-28

htmlspecialchars 和 htmlentities 的区别

PHP 手册中对 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 ‘&lt;’
‘>’ (greater than) becomes ‘&gt;’

htmlspecialchars 只转化上面这几个html代码,而 htmlentities 却会转化所有的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 ,否则可能乱码
另外参考一下这个自定义函数

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) : ”;
}

最后编辑:
作者:admin
这个作者貌似有点懒,什么都没有留下。

htmlspecialchars 和 htmlentities 的区别》有 19 条评论

  1. 问道推广员 说:

    有意思。

  2. 电影 说:

    俺只是个爱看电影电视剧的人,对博客说实话不大热爱,但来了,就踩踩

  3. 356688 说:

    我来也,看看您的博客,貌似不错,O(∩_∩)O

  4. 杭州激光打标 说:

    这文章不错,博主继续写些好文出来!

  5. 杭州激光雕刻 说:

    顶一下,博主写得不错

  6. 淘宝网 说:

    网站文章写的很不错,RSS已经被我订阅了!

  7. 最好的防辐射孕妇装 说:

    路过,踩一下,嘿嘿。

  8. 防辐射服十大品牌 说:

    有些时日没有过来看看了.

  9. 防辐射服哪个牌子好 说:

    顶一下起来~~~~~~~~~~。

  10. fatcow 说:

    感谢楼主的分享,顶你。

  11. 平安保险 说:

    博主的文章写得不错,很有帮助。

  12. xixi 说:

    顶一个。哈哈

  13. 水果味 说:

    没错。楼上说的不错。我也是这样想的

  14. 淘宝网 说:

    网站做的很不错,已经收藏下来了。

  15. 南阳吧 说:

    从搜索引擎跑过来的,文章写的很不错。

  16. 唐狮 说:

    网站做的很不错呀,有空也到我的网站看看吧,是专卖店呢。

  17. 南阳吧 说:

    又来了,发现现在已经变成你网站的忠实粉丝了。

  18. 问道 说:

    路过。。。

  19. 南阳吧 说:

    今天没事做,想起来好几天没有过来了,就过来看看你了。

留下一个回复