Maison  >  Article  >  développement back-end  >  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
Barbara Streisandoriginal
2024-10-26 12:15:29177parcourir

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>

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>

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!

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