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 相关文章推荐
PHP5 面向对象程序设计
Feb 13 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
php 在文件指定行插入数据的代码
May 08 PHP
php 团购折扣计算公式
Nov 24 PHP
PHP排序算法的复习和总结
Feb 15 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
PHP5.5和之前的版本empty函数的不同之处
Jun 13 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
php计算函数执行时间的方法
Mar 20 PHP
php下载文件超时时间的设置方法
Oct 06 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
Oct 28 PHP
PHP实现生成模糊图片的方法示例
Dec 21 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
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
用PHP+MySql编写聊天室
2006/10/09 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
python中的插值 scipy-interp的实现代码
2018/07/23 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
python实现图书借阅系统
2019/02/20 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
PyTorch中permute的用法详解
2019/12/30 Python
tensorflow 实现数据类型转换
2020/02/17 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
奇怪的鱼:Weird Fish
2018/03/18 全球购物
员工培训邀请函
2014/01/11 职场文书
鼋头渚导游词
2015/02/05 职场文书
年度考核表个人总结
2015/03/06 职场文书
2015年社区创卫工作总结
2015/04/21 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
MySQL GRANT用户授权的实现
2021/06/18 MySQL
java版 联机五子棋游戏
2022/05/04 Java/Android