ホームページ  >  記事  >  データベース  >  PHP でデータベース行をエンコードするときに json_encode() で UTF-8 文字が失われることがあるのはなぜですか?

PHP でデータベース行をエンコードするときに json_encode() で UTF-8 文字が失われることがあるのはなぜですか?

DDD
DDDオリジナル
2024-10-30 20:56:30571ブラウズ

Why Does json_encode() Sometimes Lose UTF-8 Characters When Encoding Database Rows in PHP?

json_encode() の UTF-8 文字エンコーディングの問題

PHP では、特に作業時に UTF-8 文字エンコーディングを処理することが困難になることがあります。データベースと JSON エンコーディングを使用します。アクセント付き文字を含むデータベース行を含む配列を JSON エンコードしようとすると、一般的な問題が 1 つ発生します。ドキュメントでは json_encode() が UTF-8 をサポートしていると主張していますが、エンコード プロセス中に一部の文字が失われたり、null 値として表示されたりする可能性があります。

この問題を解決するには、別のアプローチが必要です。行の配列を直接エンコードする代わりに、空の配列を作成し、エンコードされた値を行ごとに設定します。以下に例を示します:

<code class="php">// Create an empty array for the encoded resultset
$rows = array();

// Loop over the db resultset and put encoded values into $rows
while($row = mysql_fetch_assoc($result)) {
  $rows[] = array_map('utf8_encode', $row);
}

// Output $rows
echo json_encode($rows);</code>

この更新されたコードでは:

  1. エンコードされた結果セットを保持するために空の配列 ($rows) が初期化されます。
  2. 行が反復され、各行が array_map() を介して渡されて、その個々の値がエンコードされます。
  3. エンコードされた値は $rows 配列に保存されます。
  4. 最後に、エンコードされた $rows 配列は次のようになります。 JSON でエンコードされて出力されます。

このアプローチにより、最終的な JSON エンコードの前にすべての UTF-8 文字が適切にエンコードされるようになり、元のコードで一部の文字が失われたり null として表示されたりする問題が解決されます。 .

以上がPHP でデータベース行をエンコードするときに json_encode() で UTF-8 文字が失われることがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。