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 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
Aug 21 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
php解决约瑟夫环示例
Apr 09 PHP
PHP常用的缓存技术汇总
May 05 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
Jan 19 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 PHP
PHP获取当前系统时间的方法小结
Oct 03 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
JAVA/JSP学习系列之七
2006/10/09 PHP
MySQL修改密码方法总结
2008/03/25 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
AngularJS实现的省市二级联动功能示例【可对选项实现增删】
2017/10/26 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
python单例模式获取IP代理的方法详解
2018/09/13 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python匿名函数的使用方法解析
2019/10/10 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
《天游峰的扫路人》教学反思
2014/04/25 职场文书
关于安全的演讲稿
2014/05/09 职场文书
本溪水洞导游词
2015/02/11 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
初中语文教师研修日志
2015/11/13 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
远程教育学习心得体会
2016/01/23 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python