php过滤输入操作之htmlentities与htmlspecialchars用法分析


Posted in PHP onFebruary 17, 2017

本文实例讲述了php过滤输入操作htmlentities与htmlspecialchars用法。分享给大家供大家参考,具体如下:

过滤输入 (即来自所列数据源中的任何数据)是指,转义或删除不安全的字符。在数据到达应用的存储层之前,一定要过滤输入数据。这是第一道防线。假如网站的评论表单接收html,默认情况下访客可以毫无阻拦地在评论中加入恶意的<script>标签,如下标示:

<p>
  我的测试
</p>
<script>alert(123)</script>

上面例子。如果不过滤这个评论,恶意代码会存入数据库,然后再网站的标记中渲染。

HTML

我们可以使用htmlentities或者htmlspecialchars函数来过滤html,把特殊字符转换成对应的html实体。

htmlentities这个函数转换所有含有对应“html实体”的特殊字符,比如货币表示符号欧元英镑等、版权符号等,htmlspecialchars 只是把某些特殊的字符转义了, & " ' < >

这2个函数比较傻,默认是不会转义单引号的

$str='<a href="test.html" rel="external nofollow" >\'测试页面\'</a><script>alert(213)</script>'; 
//并没有转义单引号
echo $str;
echo "<hr/>".PHP_EOL;
echo htmlentities($str);
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str);

需要设置第2个参数 ENT_QUOTES,具体可以看php手册

echo htmlentities($str,ENT_QUOTES,'UTF-8'); //单引号也转义
echo "<hr/>".PHP_EOL;
echo htmlspecialchars($str,ENT_QUOTES,'UTF-8');//单引号也转义

以上例子并不能区别出htmlentities和htmlspecialchars ,下面换上一些特殊的字符,如欧元等。htmlentities将会对此转义,htmlspecialchars却不会

echo htmlentities('? <>"').PHP_EOL;
echo "<hr/>".PHP_EOL;
echo htmlspecialchars('? <>"').PHP_EOL; //?没有转义

结论:做一般表单提交的时候完全可以用strip_tags去除html标签,如果涉及到富文本编辑器需要保留html标签,可以用htmlspecialchars对提交数据进行过滤。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php Mysql日期和时间函数集合
Nov 16 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
php中explode与split的区别介绍
Oct 03 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
yii2中的rules 自定义验证规则详解
Apr 19 PHP
php 微信开发获取用户信息如何实现
Dec 13 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
php 数据结构之链表队列
Oct 17 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 PHP
php字符串倒叙
Apr 01 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 #PHP
php使用str_shuffle()函数生成随机字符串的方法分析
Feb 17 #PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 #PHP
PHP中单例模式与工厂模式详解
Feb 17 #PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 #PHP
PHP合并数组函数array_merge用法分析
Feb 17 #PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 #PHP
You might like
PHP 的几个配置文件函数
2006/12/21 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP生成条形图的方法
2014/12/10 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
js表单登陆验证示例
2016/10/19 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
详细探究Python中的字典容器
2015/04/14 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
毕业生自荐信格式
2014/03/07 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
优秀高中学生评语
2014/12/30 职场文书
面试复试通知单
2015/04/24 职场文书
地道战观后感
2015/06/04 职场文书
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技