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动态生成虚拟现实VRML网页
Oct 09 PHP
discuz安全提问算法
Jun 06 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
Jul 01 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
php获取本周开始日期和结束日期的方法
Mar 09 PHP
thinkphp3.2点击刷新生成验证码
Feb 16 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
php查询操作实现投票功能
May 09 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 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
无线电的诞生过程
2021/03/01 无线电
php获取远程图片体积大小的实例
2013/11/12 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
jQuery插件zepto.js简单实现tab切换
2015/06/16 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
ReactNative 之FlatList使用及踩坑封装总结
2017/11/29 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
python使用urllib2提交http post请求的方法
2015/05/26 Python
python动态网页批量爬取
2016/02/14 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python读取stdin方法实例
2019/05/24 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
体育教师工作总结的自我评价
2013/10/10 职场文书
大学生应聘自荐信
2013/10/11 职场文书
教你打造完美的创业计划书
2014/01/06 职场文书
超市采购员岗位职责
2014/02/01 职场文书
2014年导购员工作总结
2014/11/18 职场文书
婚礼答谢礼品
2015/01/20 职场文书
会计专业自荐信范文
2015/03/05 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
心灵点滴观后感
2015/06/02 职场文书
珍爱生命主题班会
2015/08/13 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书