PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号


Posted in PHP onSeptember 30, 2015

最近发现做一个php程序表单数据提交写入数据库的内容中只要是带有单引号或者双引号的内容时,后面都会增加一个反斜杠。而且每保存一次增加一个反斜杠,很是郁闷。

于是从网上搜了一下原来是PHP程序为了防止注入或者溢出,通过PHP 指令 magic_quotes_gpc自动在双引号、单引号、反斜杠、NULL前面添加反斜杠。

默认PHP 指令 magic_quotes_gpc是on的,也就是打开的。这时候就可以用stripslashes() 函数删除自动添加的反斜杠。用法就是:比如包含字符串的变量是$str,那么就用stripslashes() 函数处理一下这个字符串:stripslashes($str),输出的结果就是去掉反斜杠的。

于是我就把读取的字符串内容用stripslashes()函数处理一下,即$value=stripslashes($str),再保存。

但是又出现另外一个问题,那就是因为本地PHP 指令 magic_quotes_gpc是off的,如果用这个函数的话,就会把本来正常的反斜杠也去掉了。这样就不是我们所希望的了。

解决办法就是可以使用函数 get_magic_quotes_gpc() 进行检测,如果是打开的状态,那么就去除反斜杠,如果是关闭的状态,则不去除反斜杠。

程序代码如下:

$str=$_POST["str"];//读取str的内容赋值给$str变量
if(get_magic_quotes_gpc())//如果get_magic_quotes_gpc()是打开的
{$str=stripslashes($str);//将字符串进行处理
}

下面介绍三种方法解决这个问题:

方法1:修改PHP配置文件php.ini

这种方法只适于自己有权管理服务器的情况下,如果用的虚拟空间,那就只能采用后两条方法。

在PHP配置文件php.ini中将magic_quotes_gpc、magic_quotes_runtime、magic_quotes_sybase全部设为off。如下所示:

  magic_quotes_gpc = Off
  
  magic_quotes_runtime = Off
  
  magic_quotes_sybase = Off

方法2:利用.htaccess文件

该方法只在服务器支持htaccess的情况下,现在的服务器一般都会支持的

在程序目录下.htaccess文件中增加下面一句:

 php_flag magic_quotes_gpc Off

方法3: 在代码中屏蔽

该方法是移植性最强的,不用考虑服务器的配置,只要支持PHP就可以使用。

在所有PHP文件开始处增加下面代码

if(get_magic_quotes_gpc()){
   function stripslashes_deep($value){
     $value=is_array($value)?array_map('stripslashes_deep',$value):stripslashes($value);
     return $value;
   }
   $_POST=array_map('stripslashes_deep',$_POST);
   $_GET=array_map('stripslashes_deep',$_GET);
   $_COOKIE=array_map('stripslashes_deep',$_COOKIE);
   $_REQUEST=array_map('stripslashes_deep',$_REQUEST);
 }

以上介绍就是本文给大家介绍的PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号,希望大家喜欢。

PHP 相关文章推荐
php 获取完整url地址
Dec 20 PHP
php下通过伪造http头破解防盗链的代码
Jul 03 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
php适配器模式介绍
Aug 14 PHP
php curl的深入解析
Jun 02 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
微信支付开发发货通知实例
Jul 12 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
Thinkphp 3.2框架使用Redis的方法详解
Oct 24 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 #PHP
解决php表单重复提交实现方法
Sep 29 #PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 #PHP
php猜单词游戏
Sep 29 #PHP
PHP代码优化技巧小结
Sep 29 #PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 #PHP
PHP类的封装与继承详解
Sep 29 #PHP
You might like
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
php实现RSA加密类实例
2015/03/26 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP _construct()函数讲解
2019/02/03 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
js 方法实现返回多个数据的代码
2009/04/30 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
7个JS基础知识总结
2014/03/05 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
分析Python中解析构建数据知识
2018/01/20 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
python简单实现9宫格图片实例
2020/09/03 Python
python eventlet绿化和patch原理
2020/11/21 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
公司年会搞笑主持词
2014/03/24 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
2016高考寄语集锦
2015/12/04 职场文书
python使用glob检索文件的操作
2021/05/20 Python
详解Python中__new__方法的作用
2022/03/31 Python