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安全配置
Oct 09 PHP
提取HTML标签
Oct 09 PHP
php 前一天或后一天的日期
Jun 28 PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
php断点续传之文件分割合并详解
Dec 13 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 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
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
在TP5数据库中四个字段实现无限分类的示例
2019/10/18 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
jquery uploadify隐藏上传进度的实现方法
2017/02/06 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
使用weixin-java-tools完成微信授权登录、微信支付的示例
2018/09/26 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
Python字符串详细介绍
2015/05/09 Python
pandas string转dataframe的方法
2018/04/11 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
Python闭包思想与用法浅析
2018/12/27 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
python的移位操作实现详解
2019/08/21 Python
Python基于当前时间批量创建文件
2020/05/07 Python
Pycharm调试程序技巧小结
2020/08/08 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
预防煤气中毒方案
2014/06/16 职场文书
财务会计专业自荐书
2014/06/30 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
学生检讨书
2015/01/27 职场文书
员工离职通知函
2015/04/25 职场文书
基于python实现银行管理系统
2021/04/20 Python
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python