プロパティ値に一重引用符があると PHP の「json_encode」が失敗するのはなぜですか?

Barbara Streisand
リリース: 2024-10-26 12:15:29
オリジナル
176 人が閲覧しました

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

一重引用符で JSON エンコーディングが失敗する: PHP の謎

PHP の json_encode 関数を使用して stdClass オブジェクトを JSON に変換すると、次のような問題が発生する可能性があります。不可解な失敗により、資産価値が失われます。この問題を調査し、解決策を見つけてみましょう。

指定された例は、次の動作を示しています。

<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>
ログイン後にコピー

一重引用符の書式設定の問題により、結果として得られる JSON には「post_title」プロパティがありません。 JSON の仕様では、プロパティ キーまたは値内で一重引用符を使用できないことが規定されており、json_encode はこれに厳密に従っています。

これを解決するには、次の手順に従います。

1. UTF-8 エンコーディングを確認します:

データを適切に取得するには、データベース接続で UTF-8 エンコーディングを指定する必要があります。接続方法に応じて:

  • 非推奨の MySQL API の場合は mysql_set_charset("utf8") を呼び出します。
  • mysqli の場合は mysqli_set_charset("utf8") を呼び出します。
  • PDO (PHP >=5.3.6) の接続文字列に charset=utf8 を追加するか、SET NAMES utf8.

2 を実行します。一重引用符のデコード:

文字エンコードの問題が発生した場合は、一重引用符を明示的にデコードすることを検討してください。データベースが "post_title" に対して "Alumnus? Dinner Coming Soon" を返したとします:

<code class="php">$post->post_title = str_replace("\x92", "'", $post->post_title);</code>
ログイン後にコピー

これにより、誤った文字が有効な一重引用符に変換され、適切な JSON エンコードが保証されます。

以上がプロパティ値に一重引用符があると PHP の「json_encode」が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!