magic_quotes_gpc序列化的在PHP中的效果分析
本文分析了magic_quotes_gpc在PHP序列化的影响。分享给你供你参考。以下是如下:magic_quotes_gpc是函数在PHP中,单、双引号加一些保安过滤器,但这个功能会对我们有影响序列化功能。在这里,我们将看到几个例子和解决这个问题的方法。
昨天,我的朋友请我帮他解决他的网站购物车程序的问题。用PHPCMS程序。在改变空间之前,它是好的,只是改变了空间。具体的问题是提示加入购物车,跳转到购物车页面,购物车是空的。
我看了代码。总的原则是存储阵列中的产品ID和数量,然后将其存储在cookie和序列化序列化之后,饼干在购物车页面,得到阵列的读取相应的产品信息。
在序列化调试发现问题,我先写了一个基于其购物车原理代码段,代码如下:
复制代码代码如下:< PHP
标题(内容类型:文本/ HTML;字符集= UTF-8);
魔法= get_magic_quotes_gpc美元()开放:打开;
$str =数组(array('ods_id= > 13,若干= > 1));
setcookie(车
magic_quotes_gpc回声:美元的魔力。;
echo $ _cookie { 'cart}。;
print_r(序列化($ _cookie { 'cart ' }));
>
如果你执行这个代码,你可以看到,当你的magic_quotes_gpc是封闭的,有这个程序的执行没有问题。但当magic_quotes_gpc是开放的,你会发现,反序列化不成功。然后你可能知道问题出在哪里。
原因是,magic_quotes_gpc是开放的,系统会自动把饼干后单引号在逃跑的结果,加上,所以价值为_cookie { } 'cart成为:1:{我:0;:2:{:8:ods_id ;我:13;:6:;我:1;} }
解决方案是简单地把序列化($ _cookie { 'cart ' })为序列化(stripslashes($ _cookie { 'cart ' })),在添加和删除Cookie stripslashes,转义字符,所以没问题。
对于cookie的影响,我们再做一次测试:
1。问题:项目数据需要在cookie中序列化,然后得到cookie的数据逆序,获取原始数据,代码如下所示:
将代码复制如下:$ { 0 } =数组();
$ { 1 } =数组();
jsona = json_encode美元(美元);
setcookie(testcookie
setcookie(testcookie
var_dump($ jsona,true); / /正常值
var_dump(json_decode($ _cookie { 'testcookie},true); / /)得到任何价值
当cookie分配未通过时,正常的反序列化是在cookie之后进行的,其值是空的。
2。分析,代码如下:
将代码复制如下:$ { 0 } =数组();
$ { 1 } =数组();
jsona = json_encode美元(美元);
var_dump($ jsona); / /串(50){ {关键: u54c8 u903b},{关键: u54c8 u903b} }
setcookie(testcookie
setcookie(testcookie
var_dump($ _cookie { 'testcookie}); / /串(62){ { 关键 u54c8: u903b },{关键: u54c8 u903b } }
var_dump(json_decode($ _cookie { 'testcookie},真的));
与几种处理后的cookie处理的数据相比,代码如下所示:
复制代码代码如下:var_dump(json_decode(stripslashes($ _cookie { 'testcookie}),真的));
var_dump(json_decode(str_replace(
三.摘要:magic_quotes_gpc会影响所获得的数据得到|后|曲奇饼的时候它是开放的。所以当我们处理数据后得到| |饼干,我们首先判断magic_quotes_gpc开幕。
(1)在打开的情况下,数据的处理需要stripslashes
在开放的情况下,接收数据的第一stripslashes addslashes,处理数据
希望本文能对大家的PHP程序设计有所帮助。