0

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にあることをすでに理解しており、それをデコードするために適切なアクションを実行するため、データベースから返された変数を呼び出すべきではありません、正しいですか?

解決済み

結局のところ、テーブル内のデータは正しくインポートされていません。ここのように、その文字セットについて明示的なステートメントを使用する必要がありました

4

2 に答える 2

1

接続を UTF-8 に設定します。

MySQL:

SET NAMES utf8;

mysql の場合:

mysql_set_charset('utf8', $connection);

mysqli の場合:

$connection->set_charset('utf8');

等。

于 2012-11-01T16:34:38.047 に答える
1

ファイルがBOM なしの UTF-8として保存されていることを確認してください。

使用する IDE によって異なりますが、たとえば Notepad++ には Encoding File メニューがあります。

于 2012-11-01T23:47:07.067 に答える