ホームページ >バックエンド開発 >PHPチュートリアル >php_PHP チュートリアルで false を返すアンシリアライズの解決策
phpは、serialize(シリアル化)メソッドとunserialize(デシリアライズ)メソッドを提供します。
serialize を使用してシリアル化した後、unserialize を使用してデシリアライズして元のデータを取得します。
まず次のプログラム例を見てみましょう:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$arr = 配列( '名前' => 'fdipzone'、 「性別」=>「男性」 ); $str = Serialize($arr) //シリアル化 echo 'str:'.$str."rnrn" をシリアル化します
$content = unserialize($str); // 逆シリアル化 echo "str:rn のシリアル化を解除"; var_dump($content); ?>
|
2 3 4 5 6 7 8 9
| str:a:2:{s:4:"名前";s:8:"fdipzone";s:6:"性別";s:4:"男性";} をシリアル化します
文字列のシリアル化を解除します: 配列(2) { ["名前"]=> 文字列(8) "fdipzone" ["性別"]=> 文字列(4)「男性」}
|
3 4
| $str = 'a:9:{s:4:"時刻";i:1405306402;s:4:"名前";s:6:"新陳";s:5:"url";s:1 : "-";s:4:"単語";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:"ミャオ";s:1:"5";}';
var_dump(unserialize($str)) // bool(false) ?>
シリアル化された文字列を確認し、問題が 2 か所にあることを確認します: s:5:"URL" この問題の原因は、データをシリアル化するときのエンコーディングがデシリアル化するときのエンコーディングと矛盾していることです。たとえば、データベースが latin1 であり、UTF-8 の文字長が異なることが原因です。
1
声明: この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。 |