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与SQL注入攻击[二]
Apr 17 PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 PHP
php读取excel文件的简单实例
Aug 26 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
关于PHP开发的9条建议
Jul 27 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
php swoft框架实例用法
Dec 22 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 Socket配置以及实例的详细介绍
2013/06/13 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
Javascript日期对象的dateAdd与dateDiff方法
2008/11/18 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
python 从远程服务器下载日志文件的程序
2013/02/10 Python
进一步了解Python中的XML 工具
2015/04/13 Python
git进行版本控制心得详谈
2017/12/10 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
用友笔试题目
2016/10/25 面试题
广告学专业推荐信范文
2013/11/23 职场文书
入团者的自我评价分享
2013/12/02 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
中职招生先进个人材料
2014/08/31 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
律师函格式范本
2015/05/27 职场文书
教师教育教学随笔
2015/08/15 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
python中Matplotlib绘制直线的实例代码
2021/07/04 Python