PHP中htmlentities和 htmlspecialchars区别

news/2024/7/3 6:30:16 标签: php, 区别, htmlspecia

简介:

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 characters
  • htmlentities — Convert all applicable characters to HTML entities
  • htmlspecialchars_decode — Convert special HTML entities back to characters
  • htmlspecialchars - Convert special characters to HTML entities

2. 文档:

  1. 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.*

  2. 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:

php">//**注意这里的欧元字符的区别:**
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"><?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 时,要注意为第三个参数传递正确的编码。
**


http://www.niftyadmin.cn/n/739366.html

相关文章

双缓冲绘图

显示图形如何避免闪烁&#xff0c;如何提高显示效率是问得比较多的问题。而且多数人认为MFC的绘图函数效率很低&#xff0c;总是想寻求其它的解决方案。 MFC的绘图效率的确不高但也不差&#xff0c;而且它的绘图函数使用非常简单&#xff0c;只要使用方法得当&#xff0c;再…

科目二考试注意事项笔记

1. 起步前 1. 调整座位 2. 安全带 3. 后视镜 4. 左转向灯 5. 松手刹 6. 挂档 7. 车门2. 倒车入库 1. 倒车前调整车姿态 2. 一定要慢 3. 矣早点打方向、 4. 小心出库3. 侧方停车 1. 起步打左转灯 2. 看到第二条黄线时候立刻回方向4. 坡道 一定要稳、半联动状态、抖的厉害、咔…

解析dll文件和lib文件的区别

摘自&#xff1a;http://hi.baidu.com/sihochina/blog/item/8c8b570611452f7e0308813d.html解析dll文件和lib文件的区别&#xff08;如何利用VC创建DLL文件&#xff09;2008年04月23日 星期三 下午 01:47.dll是在你的程序运行的时候才连接的文件&#xff0c;因此它是一种比较小…

回调函数实现类层次结构上下层的通信

首先用摘自VCKBase上的一篇文章介绍下函数指针和回调函数。 程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数&#xff0c;不包括完全依赖于不同语法和语义规则的类成员函数&#xff08;类成员指针将在另文中…

驾校科目三考试项目

1. 上车前准备 上车前前后查看、验证指纹、前后查看后开车门上车后调整座椅、安全带、空档点火、灯光模拟前后、左右观察后 开左转向灯一档起步松手刹、送离合器、稳定、 送刹车 2. 灯光 3. 超车、变道 开左转向灯、变换灯光、多次查看左后方车辆、前方车辆情况、加速、加档…

深入浅出MFC读书笔记1

第二次读《深入浅出MFC》比第一次轻松多了。这里记录一下&#xff0c;我自认为的重点的内容,包括一些经常疑惑的细节。 Win32中CALLBACK被定义为_stdcall,是一种函数调用习惯&#xff0c;关系到参数进入到堆栈的次序&#xff0c;以及处理堆栈的责任归属&#xff0c;其它的函数…

PHP使用Redis存储session时的一个Warning定位

1. 问题现象 系统页面刷新的时候&#xff0c;偶尔会报错下面的Warnning,但是不经常出现&#xff1a; Warning: Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (tcp://x.x.x.x:6379?authyyy) in …

MATALB中信号的阈值去噪

摘自http://blog.chinaaet.com/detail/3083.html MATLAB中实现了信号的阈值去噪&#xff0c;主要包括阈值去噪和阈值获取两方面。 1.阈值获取MATLAB中实现阈值获取的函数有ddencmp、thselect、wbmpen和wwdcbm&#xff0c;下面对它们的用法进行简单的说明。 ddencmp的调用格式…