Heim  >  Artikel  >  Backend-Entwicklung  >  Warum schlägt „json_encode“ von PHP mit einfachen Anführungszeichen in Eigenschaftswerten fehl?

Warum schlägt „json_encode“ von PHP mit einfachen Anführungszeichen in Eigenschaftswerten fehl?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 12:15:29177Durchsuche

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

JSON-Kodierung schlägt mit einfachen Anführungszeichen fehl: Ein PHP-Rätsel

Wenn Sie die json_encode-Funktion von PHP verwenden, um ein stdClass-Objekt in JSON zu konvertieren, kann es zu Problemen kommen ein rätselhafter Fehler, der zum Verlust von Immobilienwerten führte. Lassen Sie uns dieses Problem untersuchen und eine Lösung finden.

Das gegebene Beispiel zeigt das Verhalten:

<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>

Dem resultierenden JSON fehlt die Eigenschaft „post_title“ aufgrund eines Formatierungsproblems mit einfachen Anführungszeichen. Die JSON-Spezifikation schreibt vor, dass einfache Anführungszeichen in Eigenschaftsschlüsseln oder -werten nicht zulässig sind, woran sich json_encode strikt hält.

Um dieses Problem zu beheben, führen Sie die folgenden Schritte aus:

1. Stellen Sie die UTF-8-Kodierung sicher:

Datenbankverbindungen müssen die UTF-8-Kodierung angeben, um Daten ordnungsgemäß abzurufen. Abhängig von Ihrer Verbindungsmethode:

  • Rufen Sie mysql_set_charset("utf8") für die veraltete MySQL-API auf.
  • Rufen Sie mysqli_set_charset("utf8") für mysqli auf.
  • Fügen Sie charset=utf8 zur Verbindungszeichenfolge für PDO (PHP >=5.3.6) hinzu oder führen Sie SET NAMES utf8 aus.

2. Einfache Anführungszeichen dekodieren:

Wenn Sie auf ein Problem mit der Zeichenkodierung stoßen, sollten Sie einfache Anführungszeichen explizit dekodieren. Angenommen, Ihre Datenbank gibt „Alumnus? Dinner Coming Soon“ für „post_title“ zurück:

<code class="php">$post->post_title = str_replace("\x92", "'", $post->post_title);</code>

Dadurch wird das fehlerhafte Zeichen in ein gültiges einfaches Anführungszeichen umgewandelt, um die ordnungsgemäße JSON-Kodierung sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum schlägt „json_encode“ von PHP mit einfachen Anführungszeichen in Eigenschaftswerten fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn