根据php手册,htmlentities与htmlspecialchars功能几乎是一模一样。唯一的差别就是,对于无效的代码单元序列(通俗讲就是不认识的编码)是否进行编码。htmlentities会进行编码,而htmlspecialchars不会。

举个简单的例子:

一个php文件是以utf-8格式编码的,里面存放中文字符,这时你使用htmlentities,而且encoding设置为ISO-8859-1, 中文字符就会被编码了,如下面

<?php
$str = '中文字符';
echo htmlentities($str, ENT_QUOTES, 'ISO-8859-1');
//&auml;&cedil;&shy;&aelig;��&aring;&shy;�&ccedil;&not;&brvbar;
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
//中文字符
?>

htmlentites的使用

htmlentities(string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )后面可带4个参数。

<?php
//ENT_COMPAT不转化'字符,ENT_QUOTES转化
$str = "< ' \" > \n";
echo htmlentities($str, ENT_COMPAT);
echo htmlentities($str, ENT_QUOTES);
//ouput:
//&lt; ' &quot; &gt;
//&lt; ' &quot; &gt; //ENT_NOQUOTES单引号和双引号都不转化
//ENT_IGNORE于php5.3加入,对于无效的代码单元序列直接替换成empty string
//ENT_SUBSTITUTE与ENT_IGNORE类似,但不是用empty string替换。php5.4加入
//参数可以通过位运算加入:ENT_QUOTES | ENT_IGNORE //$encoding参数设置文档编码
//现在文档设置成ANSI编码,然后运行下面偌
$str = "< ' \" > 中文\n";
echo htmlentities($str, ENT_QUOTES, 'GB2312');
echo htmlentities($str, ENT_QUOTES, 'ISO8859-1');
echo htmlentities($str, ENT_QUOTES, 'BIG5');
//OUTPUT:
//&lt; ' &quot; &gt; 中文
//&lt; ' &quot; &gt; &Ouml;&ETH;&Icirc;&Auml;
//&lt; ' &quot; &gt; 中文 //现在文档设置成UTF8编码,然后运行下面偌
$str = "< ' \" > 中文\n";
echo htmlentities($str, ENT_QUOTES, 'GB2312');
echo htmlentities($str, ENT_QUOTES, 'ISO8859-1');
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
//OUTPUT:
//&lt; ' &quot; &gt; &auml;&cedil;&shy;&aelig;??
//&lt; ' &quot; &gt; &auml;&cedil;&shy;&aelig;??
//&lt; ' &quot; &gt; 中文 ?>
05-13 03:32