• PHP魔法函数 自动转义 magic_quotes_gpc和magic_quotes_runtim


    PHP魔法函数 自动转义 magic_quotes_gpc和magic_quotes_runtim

    PHP提供两个方便我们引用数据的魔法引用函数 magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在php.ini设置为ON的时候,就会为我们引用的数据碰到单引号'和双引号"以及反斜线 \ 是自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的 magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情况。那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?
    下面来讲一下:
    magic_quotes_gpc  
    作用范围是:WEB客户服务端;
    作用时间:请求开始是,例如当脚本运行时.
    magic_quotes_runtime
    作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
    作用时间:每次当脚本访问运行状态中产生的数据.
    所以
    magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
    magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据
    例子说明:
    复制内容到剪贴板
    代码:

    <form action="" method="post" >
    STR:<input type="text" name="str">
    <input type="submit">
    </form>
    <?php
    /* 我们在表单里填写:    '"\    这些符号,如果magic_quotes_gpc没有开启,那么他们不会被反斜杠转义 */
    echo '现在通过POST传递过来的值是:' ,$_POST['str'], '
    ';
    if (get_magic_quotes_gpc()) {&nbsp,forex;     // 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义
          $str = $_POST['str'];
    } else {
          $str = addslashes($_POST['str']);
    }
    echo '这里是转义过后的:' ,$str, '<hr />';
    $sql = "INSERT INTO lastnames (lastname) VALUES ('$str')";
    //=====================================================================================
    //-----magic_quotes_gpc只会转义:     通过Get/Post/Cookies获得的数据
    //-----magic_quotes_runtime会转义:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的
    //=====================================================================================
    $data = implode(file('try.php'));      // 我们在里面依然写'"\这几个字符,用来测试
    echo '这里是try.php的数据,';
    if (get_magic_quotes_runtime()) {
          $data = $data;
          echo '被系统自带转义的' .$data;
    } else {
          echo '被addslashes转义了的' .$data = addslashes($data);
    }
    $sql = "INSERT INTO lastnames (lastname) VALUES ('$data')";
    echo '
    SQL语句为:
    ' ,$sql;
    //---入库都转义了,但是多余了反斜杠,我们要读出来是原来的数据时候使用stripslashes()去掉反斜杠
    //---stripslashes()和addslashes()作用相反
    ?>
    最关键的区别是就是上面提到的2点:他们针对的处理对象不同
    magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
    magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据
    在这里顺便在提几个想关联的函数:
    set_magic_quotes_runtime():
    设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的.可以通过 echo phpinfo(); 查看magic_quotes_runtime
    get_magic_quotes_gpc():
    查看magic_quotes_gpc值.0=关闭.1=打开.
    get_magic_quotes_runtime():
    查看magic_quotes_runtime值。0=关闭.1=打开.
    注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值。
    =======================================================
    使用stripslashes去掉转义,使用addslashes添加转义字符。
    string addslashes ( string str) 返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(\')、双引号(\")、反斜线(\\)与 NUL(NULL 字符) stripslashes作用相反在处理mysql和GET、POST的数据时,常常要对数据的引号进行转义操作。 PHP中有三个设置可以实现自动对’(单引号),”(双引号),\\(反斜线)和 NULL 字符转移。 PHP称之为魔术引号,这三项设置分别是 magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。
    不能在运行时改变。在 PHP 中默认值为 on。 magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。 magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义。虽然方便的实现了对特殊符号的自动转义,但是这样会使得程序效率降低,并导致程序可移植变得麻烦。在不知道服务器ini设置的情况下,还需要调用get_magic_quotes_gpc() ,get_magic_quotes_runtime() 或ini_get()来检测状态

  • 相关阅读:
    PTA L1-002 打印沙漏 (20分)
    音乐研究
    LeetCode 155. 最小栈
    LeetCode 13. 罗马数字转整数
    LeetCode 69. x 的平方根
    LeetCode 572. 另一个树的子树
    errno错误号含义
    僵尸进程和孤儿进程
    TCP和UDP相关概念
    图相关算法
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2759716.html
Copyright © 2020-2023  润新知