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