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 COOKIE立即生效,不用刷新就可以使用
Mar 09 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
PHP学习笔记之字符串编码的转换和判断
May 22 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 PHP
php利用ZipArchive类操作文件的实例
Jan 21 PHP
如何用Laravel包含你自己的帮助函数
May 27 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
php仿discuz分页效果代码
2008/10/02 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
nginx 设置多个站跨域
2021/03/09 Servers
js清理Word格式示例代码
2014/02/13 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
JavaScript函数详解
2015/02/27 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
python中threading超线程用法实例分析
2015/05/16 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
小学生期末自我鉴定
2014/01/19 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
文化产业实施方案
2014/06/07 职场文书
招商银行工作证明
2015/06/17 职场文书
js之ajax文件上传
2021/05/13 Javascript
angular4实现带搜索的下拉框
2022/03/25 Javascript