>백엔드 개발 >PHP 튜토리얼 >遇到一个有意思的有关问题,不知道如何说,大家进来看上吧

遇到一个有意思的有关问题,不知道如何说,大家进来看上吧

WBOY
WBOY원래의
2016-06-13 11:14:57822검색

遇到一个有意思的问题,不知道怎么说,大家进来看下吧
先看代码再说吧:

$catid = $_GET['id'];<br />	if( !isset( $_COOKIE[ $cookie_name ] ) ){<br />		$cart_ary = array();<br />		$cart_ary['cart'] = array();<br />		$cart_ary['item_num'] = 0;<br />		$cart_ary['total_price'] = 0.00;<br />		setcookie( $cookie_name,json_encode( $cart_ary ),time()+(7*24*60*60) );<br />	}<br />	//第一次获取不到值,所以需要抑制第一次报错<br />	$cart_ary = json_decode( str_replace( "\\","",@$_COOKIE[ $cookie_name ] ),true );<br />	if( isset( $cart_ary['cart'][ $catid ] ) ){<br />		$cart_ary['cart'][ $catid ]++ ;<br />	}else{<br />		$cart_ary['cart'][ $catid ] = 1;<br />	}<br />	$cart_ary['item_num'] = count_cart_item_num( $cart_ary['cart'] );<br />	$cart_ary['total_price'] = count_cart_total_price( $cart_ary['cart'] );<br />	setcookie( $cookie_name,json_encode( $cart_ary ),time()+(7*24*60*60) );


具体问题是这么地:
因为 $cart_ary 是个二维数组,所以当我往 cookie 里面存的时候需要先序列化一下,开始时用 serialize() 和 unserialize() 这两个函数来的,但是不知道怎么回事在 反序列化 的时候报错了“offset xxx” 这种错误,后来百度了一下说是编码问题,但是我这是在同一个页面里面啊,而且都是是UTF-8码,所以这个问题个人觉得不是,那么第一问:大家怎么能看这个问题??

然后就是后来我改用了 json_encode() 和 json_decode() 这个两个函数,但是同时有发现了一个问题就是在编码之后往 cookie 里面存的时候 cookie 的内置机制应该是对序列化的数据做了转义了,就是在双引号前面加了反斜杠“\”,所以我不得不去掉它,就像这样;

str_replace( "\\","",@$_COOKIE[ $cookie_name ] )


然后第二问就是:
我上面说 cookie 的内置机制会对将要存入的字符串做些什么东西??


好吧,有些我知道百度,但是我一直没找到好的,所以拿出来跟大家讨论下!高手莫笑~

php json
------解决方案--------------------
你在开玩笑?
至少需要这样
$catid = $_GET['id'];
if( !isset( $_COOKIE[ $cookie_name ] ) ){
$cart_ary = array();
$cart_ary['cart'] = array();
$cart_ary['item_num'] = 0;
$cart_ary['total_price'] = 0.00;
setcookie( $cookie_name,json_encode( $cart_ary ),time()+(7*24*60*60) );
}else {
$cart_ary = json_decode( str_replace( "\\","",@$_COOKIE[ $cookie_name ] ),true );
if( isset( $cart_ary['cart'][ $catid ] ) ){
$cart_ary['cart'][ $catid ]++ ;
}else{
$cart_ary['cart'][ $catid ] = 1;
}
$cart_ary['item_num'] = count_cart_item_num( $cart_ary['cart'] );
$cart_ary['total_price'] = count_cart_total_price( $cart_ary['cart'] );
setcookie( $cookie_name,json_encode( $cart_ary ),time()+(7*24*60*60) );
}

又:count_cart_item_num 是个什么玩意?
------解决方案--------------------
1. 这个错误是因为你原先的序列化数据被破坏了,怎么被破坏的?参看第二
2. 你开启了自动转义,即魔术引号,在程序开始前,PHP已经自动帮你转义了外部提交数据,即 $_GET, $_POST, $_COOKIE 。所以你会看到莫名其妙多了个 \

你需要关掉魔术引号,修改 php.ini magic_quote_gpc=Off
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.