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面向对象全攻略 (二) 实例化对象 使用对象成员
Sep 30 PHP
php下关于中英数字混排的字符串分割问题
Apr 06 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
简单实用的PHP防注入类实例
Dec 05 PHP
PHP访问数据库集群的方法小结
Mar 14 PHP
PHP针对字符串开头和结尾的判断方法
Jul 11 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
php命令行写shell实例详解
Jul 19 PHP
PHP7 新增常量
Mar 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
PHPExcel导出2003和2007的excel文档功能示例
2017/01/04 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
jQuery实现获取动态添加的标签对象示例
2018/06/28 jQuery
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Python运算符重载用法实例
2015/05/28 Python
python选择排序算法实例总结
2015/07/01 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
Python如何实现强制数据类型转换
2019/11/22 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
《雪儿》教学反思
2014/04/17 职场文书
捐书活动总结
2014/05/04 职场文书
节约用水演讲稿
2014/05/21 职场文书
写给医院的感谢信
2015/01/22 职场文书
机动车交通事故协议书
2015/01/29 职场文书
具结保证书范本
2015/05/11 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
SQL注入详解及防范方法
2021/12/06 MySQL