欢迎使用CSDN-markdown编辑器
来源:互联网 发布:php curl 查看请求头 编辑:程序博客网 时间:2024/05/22 12:19
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )
从上面PHP中htmlentities和htmlspecialcharx的接口定义可以知道:
两者都是将html特殊符号(如< > & ’ “)等转化为一个替代的html entity(如:< 对应<),但是两者之间还是有一些区别。
用法如下:
$str = "A 'quote' is <b>bold</b>";echo htmlentities($str);// Outputs: A 'quote' is <b>bold</b>echo htmlentities($str, ENT_QUOTES);// Outputs: A 'quote' is <b>bold</b>
参数说明:
flag 标志是否处理单引号、双引号:
ENT_COMPAT Will convert double-quotes and leave single-quotes alone.
ENT_QUOTES Will convert both double and single quotes.
ENT_NOQUOTES Will leave both double and single quotes unconverted.
encoding:字符集编码
差别:
要理解两者的差别,先看两个文档说明:
1. 简介:
html_entity_decode — Convert all HTML entities to their applicable charactershtmlentities — Convert all applicable characters to HTML entitieshtmlspecialchars_decode — Convert special HTML entities back to charactershtmlspecialchars - Convert special characters to HTML entities
文档:
htmlentities:
This function is identical to htmlspecialchars() in all ways, * except with htmlentities(), all characters which have HTML character entity equivalents are translated into these entities.*
htmlspecialchars :
If you require all input substrings that have associated named entities to be translated, use htmlentities() instead.
重点:
htmlspecialchars 只转换(& < > ’ ” )这几个字符
而htmlentities 转换所有含有对应“html实体”的特殊字符,比如货币表示符号欧元英镑等、版权符号等。 其他符号列表可以参考:http://www.thesauruslex.com/typo/eng/enghtml.htm
Eg:
//**注意这里的欧元字符的区别:**echo htmlentities('€ <>"')."\r\n";//€ <>"echo htmlspecialchars('€ <>"')."\r\n";//€ <>"
网络理解的错误
有一些人对这两个字符的差别存在很大的理解错误。比如这里:http://www.cnblogs.com/A-Song/archive/2011/12/20/2294599.html
说:
htmlspecialchars 只转化上面这几个html字符,而 htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。
用的是下面这个例子:
<?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 ,否则可能乱码。
**实际上上面的理解是错误的,因为htmlentities还有第三个编码的参数。
使用正确的编码,就可以消除上面的中文错误。如下:**
htmlentities 还有三个可选参数,分别是 quotestyle、charset、 doubleencode,手册对charset 参数是这样描述的:
Defines character set used in conversion. The default character set is ISO-8859-1.
从上面程序输出的结果判断,$str 是 GB2312 编码的,“测试页面”几个字对应的十六进制值是:
B2 E2 CA D4 D2 B3 C3 E6
然而却被当成 ISO-8859-1 编码来解析:
²âÊÔÒ³Ãæ
正好对应 HTML character entity 里的:
²âÊÔÒ³Ãæ
当然会被 htmlentities 转义掉,但是只要加上正确的编码作为参数,根本就不会出现所谓的中文乱码问题:
$str='<a href="test.html">测试页面</a>'; echo htmlentities($str, ENT_COMPAT, 'gb2312'); // <a href="test.html">测试页面</a>三人成虎,以讹传讹。
** 结论:htmlentities 和 htmlspecialchars 的区别在于 htmlentities 会转化所有的 html character entity,而htmlspecialchars 只会转化手册上列出的几个 html character entity (也就是会影响 html 解析的那几个基本字符)。一般来说,使用 htmlspecialchars 转化掉基本字符就已经足够了,没有必要使用 htmlentities。实在要使用 htmlentities 时,要注意为第三个参数传递正确的编码。
**
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 递归遍历指定深度的树状数据结构
- 那些年遇到的ajax相关问题
- java基础教程:常用对象之日期处理类(24)
- Some python print
- 洛谷 P1031 均分纸牌
- 欢迎使用CSDN-markdown编辑器
- maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
- easyui datagrid自定义按钮列,即最后面的操作列
- JAVA开发短信验证码系统
- Eclipse中使用svn
- 我们为什么要读书?
- 常用技巧(一)——尺取法
- three.js 3D坐标转化为2D屏幕坐标
- mysql零基础入门视频教程免费分享!