Maison >développement back-end >tutoriel php >Comment réparer les erreurs de non-concordance de longueur de sérialisation PHP ?

Comment réparer les erreurs de non-concordance de longueur de sérialisation PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-19 22:21:10917parcourir

How to Repair PHP Serialization Length Mismatch Errors?

Vous utilisez une inadéquation de longueur de sérialisation PHP ? Voici comment le réparer

Problème :

Lors de l'utilisation de la fonction unserialize() de PHP sur une chaîne sérialisée, vous rencontrez l'erreur :

unserialize() [function.unserialize]: Error at offset

Cause :

Cette erreur est généralement causée par un nombre d'octets incorrect longueur dans la chaîne sérialisée, ce qui entraîne des données invalides.

Solution :

Pour remédier à cela, vous pouvez recalculer les longueurs des éléments du tableau sérialisé comme suit :

  1. Utilisez preg_replace() pour modifier les données sérialisées, en recalculant le longueurs :
$data = preg_replace('!s:(\d+):"(.*?)";!e', "'s:'.strlen('').':\"\";'", $data);
  1. Maintenant, la désérialisation devrait traiter les données corrigées sans erreur.

Prévenir les problèmes futurs :

1. Valider les données sérialisées :

Utilisez une fonction telle que findSerializeError() pour identifier et localiser les erreurs dans les segments de données sérialisées.

2. Méthode de stockage alternative :

Pour un stockage plus sécurisé et fiable, envisagez d'utiliser l'encodage et le décodage base64 pour enregistrer et récupérer des données sérialisées. Cela garantit une gestion correcte des octets et des caractères.

Exemple :

// Save to database
$toDatabase = base64_encode(serialize($data));

// Retrieve from database
$fromDatabase = unserialize(base64_decode($data));

Conseils supplémentaires :

  • Assurez-vous utilisation appropriée des guillemets simples et doubles dans les données sérialisées.
  • Envisagez d'utiliser des fonctions de désinfection telles que addlashes() avant la sérialisation pour gérer les caractères spéciaux.
  • Utilisez array_walk() pour appliquer la fonction de désinfection de manière récursive aux éléments du tableau.
  • Pour les caractères UTF, utilisez array_map("utf8_encode", $array) avant la sérialisation et array_map("utf8_decode", $array) avant la dé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!

Déclaration:
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