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;
}