php解序列化失败


php解序列化失败,我用序列化函数serialize()生成的字符串如下:

a:4:{s:8:"fist_url";s:43:"http://pingpang.abang.com/od/pingpangzhishi";s:8:"test_url";s:0:"";s:3:"url";a:4:{s:4:"area";s:68:"<div class='small_list'>[area]<!--google afs2 start-->";s:4:"rule";s:89:"</a>]</span><a href='[url]' target='_blank'>*</a></div>";s:6:"filter";s:0:"";s:7:"replace";s:0:"";}s:4:"page";a:4:{s:4:"area";s:0:"";s:4:"rule";s:0:"";s:6:"filter";s:0:"";s:7:"replace";s:0:"";}}  

结果在解序列化时,unserialize()总是返回false。我不知道什么原因问我的领导,他做了一些测试没有问题,我就很奇怪,下班后回到家翻书,也没有找到原因。搜索找到一个帖子,很多人都做了与我领导相同的测试:

$a = $_POST['a'];
$t=serialize($a);
print_r(unserialize($t));

都很正常。
有位仁兄说用urlencode()处理一下有html标记的字符串再序列化就可以解序列化了,但是解析出来后还要用urldecode()处理下,就得到原始的数据了。
我写了两个可以处理数组的urlencode和urldecode的函数,供遇到相同问题的朋友参考:

/**
 * 对字符串进行url编码
 * @param unknown_type $var
 */
function urlencode_array($var){
	if(is_array($var)){
		foreach ($var as $key=>$val) {
			$var[$key]=urlencode_array($val);
		}
		return $var;
	}else{
		//$var=addslashes($var);
		return urlencode($var);

	}
}
/**
 * 对字符串进行解url编码
 * @param unknown_type $var
 */
function urldecode_array($var){
	if(is_array($var)){
		foreach ($var as $key=>$val) {
			$var[$key]=urldecode_array($val);
		}
		return $var;
	}else{
		//$var=addslashes($var);
		return urldecode($var);

	}
}

Have any Question or Comment?

发表回复

Archives