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中var_dump方法的使用详解
Jun 24 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
Jun 25 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
PHP输出日历表代码实例
Mar 27 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
php中 ob_start等函数截取标准输出的方法
Jun 22 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
PHP 模拟登陆功能实例详解
Sep 10 PHP
laravel使用数据库测试注意事项
Apr 10 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
Python学习笔记(二)基础语法
2014/06/06 Python
Python实现线程池代码分享
2015/06/21 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
python从子线程中获得返回值的方法
2019/01/30 Python
python实现图片转字符小工具
2019/04/30 Python
用Python解数独的方法示例
2019/10/24 Python
Python实现井字棋小游戏
2020/03/09 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
软件设计的目标是什么
2016/12/04 面试题
委托书的格式
2014/08/01 职场文书