使用serialize序列化后,再使用unserialize反序列化就可以獲取原來(lái) " /> 久久久国产精品免费,欧美日韩视频在线观看免费,综合久久综合久久

中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

php中unserialize返回false的解決方法

本文實(shí)例講述了php中unserialize返回false的解決方法,分享給大家供大家參考。具體方法如下:

php 提供serialize(序列化) 與unserialize(反序列化)方法。
使用serialize序列化后,再使用unserialize反序列化就可以獲取原來(lái)的數(shù)據(jù)。

先來(lái)看看如下程序?qū)嵗?/p>

<?php $arr = array(   'name' => 'fdipzone',   'gender' => 'male' );  $str = serialize($arr); //序列化 echo 'serialize str:'.$str."/r/n/r/n";  $content = unserialize($str); // 反序列化 echo "unserialize str:/r/n"; var_dump($content); ?> 

輸出:

serialize str:a:2:{s:4:"name";s:8:"fdipzone";s:6:"gender";s:4:"male";}  unserialize str: array(2) {  ["name"]=>  string(8) "fdipzone"  ["gender"]=>  string(4) "male" } 

但下面這個(gè)例子反序列化會(huì)返回false

<?php $str = 'a:9:{s:4:"time";i:1405306402;s:4:"name";s:6:"新晨";s:5:"url";s:1:"-";s:4:"word";s:1:"-";s:5:"rpage";s:29:"http://www.baidu.com/test.html";s:5:"cpage";s:1:"-";s:2:"ip";s:15:"117.151.180.150";s:7:"ip_city";s:31:"中國(guó)北京市 北京市移動(dòng)";s:4:"miao";s:1:"5";}'; var_dump(unserialize($str)); // bool(false) ?> 

檢查序列化后的字符串,發(fā)現(xiàn)出問(wèn)題是在兩處地方:

s:5:"url"
s:29:"http://www.baidu.com/test.html"
這兩處應(yīng)為
s:3:"url"
s:30:"http://www.baidu.com/test.html"

出現(xiàn)這種問(wèn)題的原因是序列化數(shù)據(jù)時(shí)的編碼與反序列化時(shí)的編碼不一致導(dǎo)致,例如數(shù)據(jù)庫(kù)是latin1和UTF-8字符長(zhǎng)度不一樣。
另外有可能出問(wèn)題的還有單雙引號(hào),ascii字符"/0"被解析為 '/0',/0在C中是字符串的結(jié)束符等于chr(0),錯(cuò)誤解析后算了2個(gè)字符。
/r在計(jì)算長(zhǎng)度時(shí)也會(huì)出問(wèn)題。

解決方法如下:

// utf8 function mb_unserialize($serial_str) {   $serial_str= preg_replace('!s:(/d+):"(.*?)";!se', "'s:'.strlen('$2').':/"$2/";'", $serial_str );   $serial_str= str_replace("/r", "", $serial_str);   return unserialize($serial_str); }  // ascii function asc_unserialize($serial_str) {   $serial_str = preg_replace('!s:(/d+):"(.*?)";!se', '"s:".strlen("$2").":/"$2/";"', $serial_str );   $serial_str= str_replace("/r", "", $serial_str);   return unserialize($serial_str); } 

例子:

echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">';  // utf8 function mb_unserialize($serial_str) {   $serial_str= preg_replace('!s:(/d+):"(.*?)";!se', "'s:'.strlen('$2').':/"$2/";'", $serial_str );   $serial_str= str_replace("/r", "", $serial_str);   return unserialize($serial_str); }  $str = 'a:9:{s:4:"time";i:1405306402;s:4:"name";s:6:"新晨";s:5:"url";s:1:"-";s:4:"word";s:1:"-";s:5:"rpage";s:29:"http://www.baidu.com/test.html";s:5:"cpage";s:1:"-";s:2:"ip";s:15:"117.151.180.150";s:7:"ip_city";s:31:"中國(guó)北京市 北京市移動(dòng)";s:4:"miao";s:1:"5";}';  var_dump(unserialize($str));  // false  var_dump(mb_unserialize($str)); // 正確 

使用處理過(guò)單雙引號(hào),過(guò)濾/r的mb_unserialize方法就能成功反序列化了。

使用unserialize:

bool(false) 
 
使用mb_unserialize

array(9) {  ["time"]=>  int(1405306402)  ["name"]=>  string(6) "新晨"  ["url"]=>  string(1) "-"  ["word"]=>  string(1) "-"  ["rpage"]=>  string(30) "http://www.baidu.com/test.html"  ["cpage"]=>  string(1) "-"  ["ip"]=>  string(15) "117.151.180.150"  ["ip_city"]=>  string(31) "中國(guó)北京市 北京市移動(dòng)"  ["miao"]=>  string(1) "5" }

希望本文所述對(duì)大家php程序設(shè)計(jì)的學(xué)習(xí)有所幫助。

php技術(shù)php中unserialize返回false的解決方法,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 精品乱码一区二区三四区 | 九色91视频 | 国产成人高清成人av片在线看 | 久草在线免费资源 | 波多野吉衣在线播放 | 国产午夜精品久久久久 | 中文字幕精品一区 | 成人妇女免费播放久久久 | 亚洲久草| 在线免费看毛片 | 福利网站导航 | 久草成人| www亚洲精品| 国产精品免费在线 | 一区二区在线看 | 亚洲综合色视频在线观看 | 久久久久久久一区 | 久久99精品久久久久久狂牛 | av中文字幕网| 久久一区二区三区电影 | 中文在线一区 | 国产精品污污视频 | 日本一二三区高清 | 国产一级特黄视频 | 久久综合成人精品亚洲另类欧美 | 欧美久久久网站 | 亚洲一区二区中文字幕在线观看 | 国产精品欧美日韩 | 亚洲视频一区 | 精品99久久 | 日韩精品一区二区三区在线播放 | 欧美国产精品一区二区三区 | 美女视频黄的 | www四虎影视 | 超碰人人爱| 成人在线网址 | 日朝毛片 | 久草免费电影 | 成人精品在线观看 | 久久免费看 | 视频一区二区国产 |