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