Maison >développement back-end >tutoriel php >Comment réparer « unserialize() : erreur lors du décalage » dans les chaînes sérialisées PHP ?
Lorsque vous traitez des données sérialisées, il est possible de rencontrer une erreur indiquant "unserialize() [function.unserialize] : Erreur au décalage." Cette erreur se produit généralement en raison de données de sérialisation non valides causées par une longueur de nombre d'octets incorrecte.
Pendant la sérialisation, PHP calcule la longueur de chaque élément du tableau sérialisé à l'aide du strlen( ) fonction. Toutefois, si les données contiennent des caractères, tels que des guillemets doubles, qui nécessitent un traitement spécial (par exemple, une fuite), le nombre d'octets peut devenir incorrect.
Pour résoudre cette erreur, il est nécessaire de recalculer manuellement la longueur de chaque élément du tableau sérialisé :
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
En plus de la solution rapide, il est important d'identifier la cause de la sérialisation incorrecte. Considérez les étapes suivantes :
$toDatabase = base64_encode(serialize($data)); // Save to database $fromDatabase = unserialize(base64_decode($data)); //Getting saved format
Bien que le message d'erreur fournisse une indication générale du problème, il est souvent utile d'identifier le emplacement exact des données corrompues. Pour ce faire, utilisez la fonction findSerializeError, qui compare deux chaînes sérialisées et identifie les différences entre elles, y compris l'octet incorrect. compte :
function findSerializeError($data1) { echo "<pre class="brush:php;toolbar:false">"; $data2 = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data1); // ... }
En fournissant des informations détaillées sur l'erreur, cette fonction aide à identifier et à résoudre les problèmes de sérialisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!