Codeigniter、Mysql、Apacheで構成されるWebサーバーをセットアップしています。
1ページのロードでは、次のようなmysqlテーブルからデータをフェッチします。
CREATE TABLE IF NOT EXISTS `names_table` (
`id` integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
....
`name` varchar(180) NOT NULL,
....
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
サーバー側のデータは次のように表示されます
echo $this->db->get_where('names_table', array('id' => '6'))->result()->name;
クライアントに提供されるページのヘッダーは、
header("Content-Type: text/html; charset=UTF-8");
さらに、メタ情報をに設定しています
<meta http-equiv="content-type" content="text/html; charset=utf-8">
クライアント要求を処理するPHPファイルはBOMなしでUTF-8でエンコードされますが、名前はシェーネフェルトのように表示されますが、シェーネフェルトである必要があります。
対応するIDをnames_table
持つ名前フィールドには、 536368c383c2b66e6566656c64が格納されています。
私は数時間かけて可能な解決策を探しましたが、これまでに見つけたすべてのヒントを機能せずにすでに適用しました。どうもありがとうございます。
編集:
クライアントにデータを表示する前に、私は実行します
mb_detect_encoding($name_field);
これはUTF-8だと言っています。UTF-8エンコーディングが設定されているChromeのページも表示しています。
私がそれを正しく理解している場合utf8_decode()
、ブラウザはドキュメントがUTF8にあることをすでに理解しており、それをデコードするために適切なアクションを実行するため、データベースから返された変数を呼び出すべきではありません、正しいですか?
解決済み
結局のところ、テーブル内のデータは正しくインポートされていません。ここのように、その文字セットについて明示的なステートメントを使用する必要がありました