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 相关文章推荐
也谈截取首页新闻 - 范例
Oct 09 PHP
PHP 数组遍历顺序理解
Sep 09 PHP
PHP下对字符串的递增运算代码
Aug 21 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
php中的动态调用实例分析
Jan 07 PHP
php数组去除空值函数分享
Feb 02 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 PHP
PHP通过GD库实现验证码功能示例
Feb 23 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实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
PHP的反射机制实例详解
2017/03/29 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
cookie的secure属性详解
2015/04/08 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
python3爬取各类天气信息
2018/02/24 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
pytorch实现查看当前学习率
2020/06/24 Python
python 绘制场景热力图的示例
2020/09/23 Python
python-地图可视化组件folium的操作
2020/12/14 Python
高中数学教师求职信
2013/10/30 职场文书
小学美术教学反思
2014/02/01 职场文书
运动会领导邀请函
2014/02/05 职场文书
奥利奥广告词
2014/03/20 职场文书
事业单位鉴定材料
2014/05/25 职场文书
预备党员个人总结
2015/02/14 职场文书
出生证明范本
2015/06/15 职场文书