Maison > base de données > tutoriel mysql > Comment réparer « unserialize() : erreur de décalage » provoquée par une longueur incorrecte du nombre d'octets dans les chaînes sérialisées ?

Comment réparer « unserialize() : erreur de décalage » provoquée par une longueur incorrecte du nombre d'octets dans les chaînes sérialisées ?

Susan Sarandon
Libérer: 2024-12-13 02:57:13
original
178 Les gens l'ont consulté

How to Fix

Réparation des chaînes sérialisées corrompues avec une longueur de nombre d'octets incorrecte

L'erreur "unserialize() [function.unserialize] : erreur à l'offset" se produit lors de la désérialisation de données corrompues en raison d'une longueur de nombre d'octets incorrecte. Pour résoudre ce problème, recalculez la longueur des éléments dans le tableau sérialisé.

Sérialisation incorrecte :

$data = 'a:10:{s:16:"submit_editorial";b:0;s:15:"submit_orig_url";s:13:"www.bbc.co.uk";s:12:"submit_title";s:14:"No title found";s:14:"submit_content";s:12:"dnfsdkfjdfdf";s:15:"submit_category";i:2;s:11:"submit_tags";s:3:"bbc";s:9:"submit_id";b:0;s:16:"submit_subscribe";i:0;s:15:"submit_comments";s:4:"open";s:5:"image";s:19:"C:fakepath100.jpg";}';
Copier après la connexion

Sortie :

Notice: unserialize() [function.unserialize]: Error at offset 337 of 338 bytes
Copier après la connexion

Recalculé Sérialisation :

$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
Copier après la connexion

Sortie :

array
  'submit_editorial' => boolean false
  'submit_orig_url' => string 'www.bbc.co.uk' (length=13)
  'submit_title' => string 'No title found' (length=14)
  'submit_content' => string 'dnfsdkfjdfdf' (length=12)
  'submit_category' => int 2
  'submit_tags' => string 'bbc' (length=3)
  'submit_id' => boolean false
  'submit_subscribe' => int 0
  'submit_comments' => string 'open' (length=4)
  'image' => string 'C:fakepath100.jpg' (length=17)
Copier après la connexion

Considérations supplémentaires :

  • Assurer vous utilisez des guillemets simples pour les valeurs de chaîne dans les données sérialisées.
  • Utilisez des filtres pour désinfectez et encodez les données avant de les sérialiser.
  • Envisagez de stocker les données sérialisées dans la base de données sous forme de chaîne codée en base64 pour une meilleure intégrité.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal