Réparer une chaîne sérialisée corrompue en raison d'une longueur de nombre d'octets incorrecte
La sérialisation implique la conversion de structures de données complexes dans un format plus simple et lisible par machine. Cependant, si la chaîne sérialisée est corrompue, cela peut entraîner des erreurs. Dans votre cas, l'erreur est provoquée par une longueur de nombre d'octets incorrecte.
Raison de la corruption
La longueur du nombre d'octets dans la chaîne sérialisée indique la taille de chaque élément . Si ce décompte est incorrect, le processus de désérialisation peut échouer. Cela peut se produire si des guillemets doubles (") sont utilisés à la place de guillemets simples ('), ce qui entraîne une identification erronée de la chaîne comme un élément unique.
Correction rapide
Pour réparer la chaîne corrompue, vous pouvez recalculer la longueur du nombre d'octets de chaque élément :
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Prévenir l'avenir Corruption
Pour éviter toute corruption future, envisagez de mettre en œuvre les éléments suivants :
function sanitize(&$value, $key) { $value = addslashes($value); } array_walk($h->vars['submitted_data'], "satitize");
Détection de la corruption
Pour détecter les chaînes sérialisées corrompues dans le à l'avenir, utilisez la fonction suivante :
function findSerializeError($data1) { // ... (code goes here) }
Stockage de base de données amélioré
Envisagez d'utiliser une méthode de stockage plus robuste, telle que l'encodage base64, avant d'enregistrer les données sérialisées dans le base de données :
$toDatabase = base64_encode(serialize($data));
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!