今天在做项目时遇到一个问题,就是将一个数组用serialize函数序列化后,用POST方式提交到另一个页面后,无法用unserialize反序列化,后来通过字符串比对,发现双引号(")被自动转义了,在网上查了下,原来是php.ini中magic_quotes_gpc项设置为on的原因
这是手册中的解释
魔术引号(Magic Quote)是一个自动将进入 PHP 脚本的数据进行转义的过程。最好在编码时不要转义而在运行时根据需要而转义。当打开时,所有的 '(单引号),"(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。
 
因此,通过get方式传递过来的字串与先前序列化后的字串并不相同,因此无法反序列化。这里有两种解决方案:
1.将php.ini中magic_quotes_gpc项设置为off
2.直接在php程序中使用set_magic_quotes_runtime(0);
3.参数接收以后先经过stripslashes()函数处理后再进行反序列化
[注]因为我这次遇到的是get方式传值,实际上magic_quotes_gpc影响到 HTTP 请求数据(GET,POST 和 COOKIE)