切换到宽版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
扫描二维码关注官方公众号
查看: 26|回复: 0

PHP表单提交引号前自动加反斜杠的三种关闭php魔术引号方法

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:281
  • 打卡月天数:11
  • 打卡总奖励:121642
  • 最近打卡:2024-10-17 12:11:16
  • TA的每日心情
    奋斗
    昨天 12:11
  • 签到天数: 322 天

    连续签到: 163 天

    [LV.8]以坛为家I

    850

    主题

    65

    回帖

    214748万

    积分

    管理员

    A1ZEYDVFewbz1

    积分
    2147483647
    威望
    2147483647 点
    金钱
    2147483647 cb
    贡献值
    2147483647 点
    违规
    0 次

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    QQ
    发表于 2024-7-17 16:46:30 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×

    最近发现做一个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() 进行检测,如果是打开的状态,那么就去除反斜杠,如果是关闭的状态,则不去除反斜杠。

    程序代码如下:

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

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

    方法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文件中增加下面一句:

    1. php_flag magic_quotes_gpc Off
    复制代码

    方法3: 在代码中屏蔽

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

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

    1. if(get_magic_quotes_gpc()){
    2.    function stripslashes_deep($value){
    3.      $value=is_array($value)?array_map('stripslashes_deep',$value):stripslashes($value);
    4.      return $value;
    5.    }
    6.    $_POST=array_map('stripslashes_deep',$_POST);
    7.    $_GET=array_map('stripslashes_deep',$_GET);
    8.    $_COOKIE=array_map('stripslashes_deep',$_COOKIE);
    9.    $_REQUEST=array_map('stripslashes_deep',$_REQUEST);
    10. }
    复制代码



    都是
    点评回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    更多主题

    QQ|站点统计|Archiver|手机版|小黑屋|73327424's BBS ( 京ICP备05008343号|京公网安备11010602022017号 )
    免责声明:
    本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

    Mail To:3574358495@qq.com

    GMT+8, 2024-10-18 12:00 , Processed in 0.154763 second(s), 38 queries .

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表