ホームページ  >  記事  >  バックエンド開発  >  PHP アンシリアライズは false を返します

PHP アンシリアライズは false を返します

WBOY
WBOYオリジナル
2016-06-13 13:06:321124ブラウズ

PHP のアンシリアライズは false を返します

問題の説明: 以下は配列をシリアル化した後のデータですが、取り出した後は逆シリアル化できません。
$a = 'a:2:{i:1;a:5:{s:8:"pic_sort";i:2;s:9:"pic_check";b:1;s:10:" pic_select";i:56;s:8:"pic_path";s:1:"ergregerg";s:8:"pic_link";s:2:"wesaddasd";}i:2;a:5:{s :8:"pic_sort";i:2;s:9:"pic_check";b:0;s:10:"pic_select";i:57;s:8:"pic_path";s:10:"4444" ;s:8:"pic_link";s:14:"http://fafa.com";}}';
print_r(unserialize($a));

問題の原因: データベースから取得したエンコーディングとページのエンコーディングの不一致が原因であると考えられます。

解決策: 次の関数呼び出しをカスタマイズするだけです
???print_r(mb_unserialize($a));
???function mb_unserialize($serial_str) {?
?????$out = preg_replace('!s:(d+):"(.*?)";!se', "'s:' .strlen('$2').':"$2";'", $serial_str );?
?????return unserialize($out);?
???}?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。