htmlspecialschars与htmlentities的区别
根据php手册,htmlentities与htmlspecialchars功能几乎是一模一样。唯一的差别就是,对于无效的代码单元序列(通俗讲就是不认识的编码)是否进行编码。htmlentities会进行编码,而htmlspecialchars不会。
举个简单的例子:
一个php文件是以utf-8格式编码的,里面存放中文字符,这时你使用htmlentities,而且encoding设置为ISO-8859-1, 中文字符就会被编码了,如下面
<?php
$str = '中文字符';
echo htmlentities($str, ENT_QUOTES, 'ISO-8859-1');
//中��符
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: //< ' " > //< ' " > //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: //< ' " > 中文 //< ' " > ÖÐÎÄ //< ' " > 中文 //现在文档设置成UTF8编码,然后运行下面偌 $str = "< ' \" > 中文\n"; echo htmlentities($str, ENT_QUOTES, 'GB2312'); echo htmlentities($str, ENT_QUOTES, 'ISO8859-1'); echo htmlentities($str, ENT_QUOTES, 'UTF-8'); //OUTPUT: //< ' " > 中æ?? //< ' " > 中æ?? //< ' " > 中文 ?>