Maison >développement back-end >tutoriel php >Pourquoi `json_encode()` renvoie-t-il des valeurs nulles pour les propriétés avec des guillemets simples ?

Pourquoi `json_encode()` renvoie-t-il des valeurs nulles pour les propriétés avec des guillemets simples ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 00:04:29655parcourir

Why is `json_encode()` returning null values for properties with single quotes?

Échec de l'encodage JSON : résolution des écarts avec des guillemets simples

Les développeurs rencontrent fréquemment des échecs silencieux lorsqu'ils tentent d'encoder des objets à l'aide de la fonction json_encode() de PHP. Dans ce contexte, un utilisateur a rencontré un problème où l'encodage d'un objet stdClass entraînait des valeurs nulles pour les propriétés contenant des guillemets simples.

Analyse

Après examen du problème, il a été a découvert que la cause sous-jacente était l'incapacité de json_encode() à gérer correctement les caractères en dehors de la plage ASCII. Le caractère guillemet simple, représenté par x92 dans un dump hexadécimal, était particulièrement problématique.

Solution

Pour résoudre le problème, il est essentiel de s'assurer que les données étant encodé est correctement encodé en UTF-8. Ceci peut être réalisé en définissant le codage de la connexion MySQL de manière appropriée, en fonction de l'API utilisée :

  • Ancienne API (obsolète) : mysql_set_charset("utf8")
  • mysqli : mysqli_set_charset("utf8")
  • PDO : Ajoutez le paramètre charset à la chaîne de connexion ou exécutez SET NAMES utf8 si vous utilisez PHP 5.3.6 ou une version antérieure .

Approche alternative

Une solution alternative peut impliquer d'utiliser utf8_decode() pour convertir le texte dans un format correctement encodé. Cependant, cela ne donne pas toujours le résultat souhaité, car cela suppose que le texte est codé en ISO-8859-1.

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