シリアル化されたデータを扱う場合、次のようなエラーが発生する可能性があります。 「unserialize() [function.unserialize]: オフセットでエラーが発生しました。」このエラーは通常、バイト カウントの長さが正しくないことによる無効なシリアル化データが原因で発生します。
シリアル化中、PHP は strlen( ) 関数。ただし、データに特殊な処理 (エスケープなど) が必要な二重引用符などの文字が含まれている場合、バイト数が正しくなくなる可能性があります。
このエラーに対処するには、シリアル化された配列内の各要素の長さを手動で再計算する必要があります:
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
簡単な修正に加えて、不正なシリアル化の原因を特定することが重要です。次の手順を検討してください。
$toDatabase = base64_encode(serialize($data)); // Save to database $fromDatabase = unserialize(base64_decode($data)); //Getting saved format
エラー メッセージは問題の一般的な兆候を示していますが、多くの場合、次の点に役立ちます。破損したデータの正確な場所を特定するには、findSerializeError 関数を使用します。この関数は、2 つのシリアル化された文字列を比較し、誤ったものを含むそれらの違いを特定します。バイト数:
function findSerializeError($data1) { echo "<pre class="brush:php;toolbar:false">"; $data2 = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data1); // ... }
この関数は、エラーに関する詳細情報を提供することで、シリアル化の問題の特定と解決に役立ちます。
以上がPHP シリアル化文字列の「unserialize(): オフセットでのエラー」を修正する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。