ホームページ >バックエンド開発 >PHPチュートリアル >バイトカウント長が正しくない破損したシリアル化文字列を修復するにはどうすればよいですか?
不正なバイト カウント長による破損したシリアル化された文字列の修復
シリアル化には、複雑なデータ構造をより単純な機械可読形式に変換することが含まれます。ただし、シリアル化された文字列が破損している場合は、エラーが発生する可能性があります。あなたの場合、エラーはバイト カウントの長さが間違っているため発生します。
破損の理由
シリアル化された文字列のバイト カウントの長さは、各要素のサイズを示します。 。このカウントが正しくないと、逆シリアル化プロセスが失敗する可能性があります。これは、一重引用符 (') の代わりに二重引用符 (") が使用されている場合に発生する可能性があり、文字列が単一の要素として誤認されます。
クイック フィックス
破損した文字列を修復するには、各文字列のバイト カウントの長さを再計算します。要素:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
将来の破損を防ぐ
将来の破損を防ぐには、次の実装を検討してください:
function sanitize(&$value, $key) { $value = addslashes($value); } array_walk($h->vars['submitted_data'], "satitize");
破損の検出
今後破損したシリアル化文字列を検出するには、次の関数を使用します:
function findSerializeError($data1) { // ... (code goes here) }
データベース ストレージの改善
さらに多くのデータベース ストレージの使用を検討してください。シリアル化されたデータをデータベースに保存する前に、base64 エンコードなどの堅牢な保存方法を使用してください:
$toDatabase = base64_encode(serialize($data));
以上がバイトカウント長が正しくない破損したシリアル化文字列を修復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。