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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
php文件系统处理方法小结
May 23 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
Jul 12 PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 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获取POST数据的几种方法汇总
2015/03/03 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
微信小程序开发中var that =this的用法详解
2020/01/18 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
python文件特定行插入和替换实例详解
2017/07/12 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
超市5.1促销活动
2014/01/15 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
英文求职信写作小建议
2014/02/16 职场文书
护理专业毕业生自我鉴定总结
2014/03/24 职场文书
个人政治思想总结
2015/03/05 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL