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中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
开源SNS系统-ThinkSNS
May 18 PHP
需要发散思维学习PHP
Jun 29 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
PHP判断上传文件类型的解决办法
Oct 20 PHP
PHP微信公众号自动发送红包API
Jun 01 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
php支付宝APP支付功能
Jul 29 PHP
PHP asXML()函数讲解
Feb 03 PHP
php5与php7的区别点总结
Oct 11 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面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
jQuery的学习步骤
2011/02/23 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
node.js基于express使用websocket的方法
2017/11/09 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
vue如何根据网站路由判断页面主题色详解
2018/11/02 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
bootstrap table插件动态加载表头
2019/07/19 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
Python可以实现栈的结构吗
2020/05/27 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
国外平面设计第一市场:99designs
2016/10/25 全球购物
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
建筑人员岗位职责
2013/12/25 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
经典商业广告词
2014/03/13 职场文书
旅游节目策划方案
2014/05/26 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2014年教研工作总结
2014/12/06 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
运动会3000米加油稿
2015/07/21 职场文书