使用serialize序列化后,再使用unserialize反序列化就可以獲取原來 " /> 国产亚洲成在线播放va,中国又粗又大又爽的毛片,www三级

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

php中unserialize返回false的解決方法

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

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

先來看看如下程序實例:

<?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" } 

但下面這個例子反序列化會返回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:"中國北京市 北京市移動";s:4:"miao";s:1:"5";}'; var_dump(unserialize($str)); // bool(false) ?> 

檢查序列化后的字符串,發現出問題是在兩處地方:

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

出現這種問題的原因是序列化數據時的編碼與反序列化時的編碼不一致導致,例如數據庫是latin1和UTF-8字符長度不一樣。
另外有可能出問題的還有單雙引號,ascii字符"/0"被解析為 '/0',/0在C中是字符串的結束符等于chr(0),錯誤解析后算了2個字符。
/r在計算長度時也會出問題。

解決方法如下:

// 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:"中國北京市 北京市移動";s:4:"miao";s:1:"5";}';  var_dump(unserialize($str));  // false  var_dump(mb_unserialize($str)); // 正確 

使用處理過單雙引號,過濾/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) "中國北京市 北京市移動"  ["miao"]=>  string(1) "5" }

希望本文所述對大家php程序設計的學習有所幫助。

php技術php中unserialize返回false的解決方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美私人网站 | 美妇乱人伦性 | 青热久思思 | 肉色丝袜一区二区高跟鞋 | 久久综合色鬼 | 精品久久久久久影院免费 | 国产激情在线观看 | 一个色综合网站 | 二区久久国产乱子伦免费精品 | 五月激情丁香婷婷综合第九 | 国产精品国产自线拍手机观看 | 男人的天堂久久精品激情a 男人进去女人爽免费视频国产 | 激情5月婷婷 | 美女视频国产 | 五月婷婷六月婷婷 | 五月婷婷之综合激情 | 五月婷婷丁香色 | 美女动作一级毛片 | 精品一久久 | 色涩网站在线观看 | 亚洲色图偷 | 中文字幕有码热在线视频 | 欧美系列第一页 | 九九51精品国产免费看 | 一级特黄色毛片免费看 | 加勒比一到三区 | 色wwwwww| 国产免费叼嘿在线观看 | 久久精品国产久金国产思思 | 四虎精品影院4hutv四虎 | 色美女网站| 国产亚洲欧美另类专区 | 91tm视频| 欧美人禽交视频免费观看 | 成人福利在线观看 | 午夜视频久久久久一区 | 美女张开腿让男人桶爽免费看 | 亚洲精品在线播放 | 欧美成人精品欧美一级乱黄 | 亚洲福利一区福利三区 | 中文字幕国产 |