http://hi.baidu.com/e_polo/blog/item/59b5651eb7870216413417f9.html
针对addslashes()函数的使用与php.ini中magic_quotes_gpc的设置之间的关系,我想做一下说明:

首先,介绍下它们的作用:

addslashes()函数是在字符串中指定的预定义字符前添加反斜杠,即进行转义。
所谓指定的预定义字符包括:1、单引号 ('')     2、双引号 (")     3、反斜杠 (\)     4、NULL
例:
$string = "I am L''polo";
echo addslashes($string);
#结果 ======
I am L\''polo

可以利用stripslashes()函数进行反转义,还原字符串。

PHP.ini 中 magic_quotes_gpc 设置为 on,就会对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。

说明:
对以上指定字符(", '', \, null)进行转义主要是SQL语句的需要
      1、数据库操作需要对字符串进行转义,从安全的角度出发也是必须的;
      2、大多数据库使用 \ 作为转义符,转义后的字符串在写入或查询数据库的时候,转义符是被去掉了的,就是说没有 \ 的
      3、所以从数据库读取时,并不需要在输出查询结果时使用stripslashes()函数进行反转义的;
直接输出GET、POST 和 COOKIE 数据时,需要使用stripslashes()函数进行反转义
如果 magic_quotes_gpc 设置为 ON,同时使用了addslashes()函数,就是双重转义
为避免双重转义,我们在程序中需要用get_magic_quotes_gpc()函数进行判断:
if(!(get_magic_quotes_gpc())) {  
    $_GET = eaddslashes($_GET);
    $_POST = eaddslashes($_POST);
    $_COOKIE = eaddslashes($_COOKIE);
}

function eaddslashes($string) {
if(is_array($string)) {
   foreach($string as $key => $val) {
    $string[$key] = eaddslashes($val);
   }
} else {
   $string = addslashes($string);
}
return $string;
}