基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍 |
当你的数据中有一些 \ ” ‘ set_magic_quotes_runtime() 可以让程序员在代码中动态开启或关闭 magic_quotes_runtime, magic_quotes_gpc 作用范围是:WEB客户服务端; magic_quotes_runtime 作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的; 所以 magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据, 复制代码 代码如下: if (!get_magic_quotes_gpc()) { new_addslashes($_GET); new_addslashes($_POST); new_addslashes($_COOKIE); } function new_addslashes($string) { if (is_array($string)) { foreach ($string as $key => $value) { $string[$key] = new_addslashes($value); } } else { $string = addslashes($string); } return $string; } 另一示例: 复制代码 代码如下: $data1 = $_POST[aaa]; $data2 = implode(file(1.txt)); if (get_magic_quotes_gpc()) { //把数据$data1直接写入数据库 } else { $data1 = addslashes($data1); //把数据$data1写入数据库 } if (get_magic_quotes_runtime()){ //把数据$data2直接写入数据库 //从数据库读出的数据要经过一次stripslashes()之后输出 } else { $data2 = addslashes($data2); //把数据$data2写入数据库 //从数据库读出的数据直接输出 } ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 经验总结: 复制代码 代码如下: function saddslashes($string) { if (is_array($string)) { foreach ($string as $key => $val) { $string[$key] = saddslashes($val); } } else { $string = addslashes($string); } return $string; } //GPC过滤 $magic_quote = get_magic_quotes_gpc(); if(empty($magic_quote)) { $_GET = saddslashes($_GET); $_POST = saddslashes($_POST); } //COOKIE,给cookie值转义 $prelength = strlen($_SC[cookiepre]); foreach ($_COOKIE as $key => $val) { if(substr($key, 0, $prelength) == $_SC[cookiepre]) { $_SCOOKIE[(substr($key, $prelength))] = empty($magic_quote) ? saddslashes($val) : $val; } } 二、对于magic_quotes_runtime,我们统一关闭它,即set_magic_quotes_runtime(0);不让从数据库读取出来的数据的单引号、双引号和反斜杠都自动被加上\ 。这样,对数据库的操作如下:添加数据到数据库之前,我们手动对数据进行addslashes(),而从数据库取出数据时,则作相反操作,即stripslashes() 。 三、对于要序列化的内容,要保持裸数据,即要去掉转义,stripslashes(),然后在把序列化过的内容保存到数据库当中(注意,序列化过的内容是不带单引号()、双引号(”)、反斜线(\)的),示例如下: $feedarr[body_data] = serialize(stripslashes($body_data)); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 出现Function set_magic_quotes_runtime() is deprecated 问题? view sourceprint? 或 view sourceprint? 或 view sourceprint? |