Maison > développement back-end > tutoriel php > Pourquoi « json_encode » de PHP échoue-t-il avec des guillemets simples dans les valeurs de propriété ?

Pourquoi « json_encode » de PHP échoue-t-il avec des guillemets simples dans les valeurs de propriété ?

Barbara Streisand
Libérer: 2024-10-26 12:15:29
original
280 Les gens l'ont consulté

Why Does PHP's `json_encode` Fail with Single Quotes in Property Values?

L'encodage JSON échoue avec des guillemets simples : un mystère PHP

Lorsque vous utilisez la fonction json_encode de PHP pour convertir un objet stdClass en JSON, vous pouvez rencontrer un échec déroutant entraînant une perte de valeur des propriétés. Explorons ce problème et découvrons une solution.

L'exemple donné démontre le comportement :

<code class="php">$post = new stdClass();
$post->post_title = "Alumnus' Dinner Coming Soon"; // note the single quote

$json = json_encode($post);
echo $json; // outputs {"ID":"12981","post_title":null,"post_parent":"0","post_date":"2012-01-31 12:00:51"}</code>
Copier après la connexion

Le JSON résultant n'a pas la propriété "post_title" en raison d'un problème de formatage avec le guillemet simple. La spécification JSON stipule que les guillemets simples ne sont pas autorisés dans les clés ou valeurs de propriété, auxquelles json_encode adhère strictement.

Pour résoudre ce problème, suivez ces étapes :

1. Assurez-vous de l'encodage UTF-8 :

Les connexions à la base de données doivent spécifier l'encodage UTF-8 pour récupérer correctement les données. En fonction de votre méthode de connexion :

  • Appelez mysql_set_charset("utf8") pour l'API MySQL obsolète.
  • Appelez mysqli_set_charset("utf8") pour mysqli.
  • Ajoutez charset=utf8 à la chaîne de connexion pour PDO (PHP >=5.3.6) ou exécutez SET NAMES utf8.

2. Décoder les guillemets simples :

Si vous rencontrez un problème d'encodage de caractères, envisagez de décoder explicitement les guillemets simples. Supposons que votre base de données renvoie "Ancien élève ? Dîner à venir" pour "post_title" :

<code class="php">$post->post_title = str_replace("\x92", "'", $post->post_title);</code>
Copier après la connexion

Cela convertit le caractère erroné en guillemet simple valide, garantissant ainsi un encodage JSON correct.

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