4

重複の可能性:
UTF-8 全体

ソリューションを高低で検索します。質問を投稿する前に、多くのバリエーションを試しました。

phpMyAdmin と html ページで同じ名前を表示するには何が必要ですか? これは達成できますか?

編集 1:これは mysql の問題のようです。なんで?PHP で生成された HTML ページには常に正しい文字が表示されるためです。この時点で、正しく表示されないのはデータベースだけです。

編集 2:明確化。以下のコードスニップと画像に示されている元の設定では、

  1. ジョアンと入力して送信
  2. João がデータベースに表示されました
  3. リロード後のジョアン表示

の追加mysqli_query ( $link, 'SET NAMES utf8' )

  1. ジョアンと入力して送信
  2. João がデータベースに表示される
  3. リロード後に表示される Jo�o

編集 2 を終了

mysql データベースで、phpMyAdmin で表示: データベース構造

項目は次のようにデータベースに表示されます: (データベースで正しく表示されるように最初の João を変更しました)

同じ名前の 2 つのエントリの phpMyAdmin ビュー

そして、エンコーディングが設定されたhtmlページでは、名前は次のように表示されます(順序が逆になり、変更されたものには黒いひし形があります)、

html ページでの外観

エンコーディング:<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

列の照合順序を utf8_bin、utf8_general_ci、utf8_unicode_ci に変更しようとしましたが、どちらの側にも変更はありません。また、ドキュメント (BBEdit) を UTF-8 から UTF-8 (BOM 付き)、ISO Latin 1、および Windows Latin 1 に変更しました。これらのいくつかは、より多くの黒いひし形を作成し、問題を悪化させました。(画像では UTF-8 に設定) ã、é などをエンコードされた同等のものに preg_replace しようとさえしました。

簡単に言えば、João がページに入力され (上記のコンテンツ タイプ)、João がデータベースにあり、João が更新時に HTML ページに来るということです。

アイデアを探しています。ありがとう。

4

4 に答える 4

7

文字セットの問題は、多くの場合、把握するのが非常に困難です。基本的に、次のすべてが当てはまることを確認する必要があります。

  • DB接続はUTF-8を使用しています
  • DBテーブルは UTF-8 を使用しています
  • DB テーブルの個々の列は UTF-8 を使用しています
  • データは実際にはデータベース内に UTF-8 エンコーディングで適切に保存されます (不適切なソースからインポートした場合や、テーブルまたは列の照合順序を変更した場合は、多くの場合そうではありません)。
  • Web ページはUTF-8を要求しています
  • Apache はUTF-8を提供しています

そのリストを最初から最後まで処理するための優れたチュートリアルを次に示します。

あなたの問題は、おそらく文字セットを変更したり、間違った文字セットで既にエンコードされたデータをインポートしたりすることで、二重にエンコードされた (またはトリプルエンコードされた) 文字を持っていることにあるようです。上記のチュートリアルには、それを修正するためのセクション全体があります。

于 2012-10-23T16:33:42.913 に答える
1

DB接続もUTF-8を使用していることを確認してください。以下の行をページの上に置いてみてください。

mysql_query("SET NAMES utf8");
于 2012-10-23T15:26:21.993 に答える
0

デフォルトの PHP は UTF8 を嫌います。通常の組み込み文字列関数ではなく、mbstring関数を使用していることを確認してください。

于 2012-10-23T15:42:29.740 に答える
0

HTML ページと、AJAX データ交換に参加するスクリプトが、以下を含む適切な HTTP ヘッダーで提供されていることを確認してください。

Content-Type: text/html; charset=UTF-8

HTML側のエンコーディング設定はブラウザによって無視される可能性があるため

于 2012-10-23T15:57:28.713 に答える