php魔术引号总结


        在一个项目中,魔术引号若是打开的话,所有的反斜线(\)、单引号(')、双引号(")、NULL 字符都会被自动加上一个反斜线进行转义,这和 addslashes() 作用完全相同。 这里主要讲四个与之相关的函数:set_magic_quotes_runtime、magic_quotes_gpc、addslashes、stripslashes。


        set_magic_quotes_runtime(),设置当前magic_quotes_runtime 配置选项的激活状态,0为关闭,1为开启。啥意思呢?这样理解,如是set_magic_quotes_runtime(1)或是配置文件中magic_quotes_runtime为true(这个在php.ini中配置),那么php脚本读取文件或是从数据库中读取数据,遇到反斜线(\)、单引号(')、双引号(")、NULL时,会在前面自动加上转义字符,变成\\、\'、\”、\NULL;若是关闭的话,也就是set_magic_quotes_runtime(0)magic_quotes_runtime为false,那么便会转义,此时可以借助addslashes进行转义。


        magic_quotes_gpc(),当此值为1时,会对HTTP请求中的G($_GET)、P($_POST)、C($_COOKIE)单双引号和反斜线进行转义;反之则不会。该操作一般见于表单提交的数据库操作,若是值为0时,便用addslashes进行转义存入数据库中,取出时再用stripslashes函数把反斜线给去掉。


      特别注意的是在PHP 5.4版本时,魔术引号被移除了,因此转义都需要加上addslashes函数。


$_GET['des'] = "she's a beauty";
foreach (array('_GET', '_POST', '_COOKIE') as $_request){
    echo $_request; // _GET_POST _COOKIE
    foreach ($$_request as $_key=> $_value){
        // $_key为键,如_GET,$$_key为$_GET
        // $$_key=$_value意思就是把$_GET['des'] = 1111便为$des=she\'s a beauty
        $_key{0} != '_' && $$_key=addslashes($_value);
        echo $$_key;
    }
}

        看看上面代码能够理解不,这是摘自我晚上看的关于介绍discuz中源码分析的书,$$_key是否有点绕,应该不会的,就是变量多重引用,可以看看我的 php变量的几种写法博客,上述代码就是过滤恶意伪造GPC请求预定义变量行为。

你可能感兴趣的:(php魔术引号总结)