0

これは本当に私のナットをやっています.....

関連するすべてのPHP出力スクリプトはヘッダーを設定します(この場合は1つのファイルのみ-メインのphpスクリプト):

header("Content-type: text/html; charset=utf-8");

HTMLメタは頭の中で設定されています:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

すべてのMysqlテーブルと関連する列は次のように設定されます。

utf8_unicode_ci     Unicode (multilingual), case-insensitive

私はいくつかの翻訳を行うためにクラスを書いています..クラスがfopen、fputsなどを使用してファイルに書き込むと、すべてがうまく機能し、正しい文字が出力ファイルに表示されます(php配列として書き込まれ、ファイルシステムにとして保存されます)。 phpまたは.htmファイル。eval()は.htmファイルを正しく戻します。使用したいときに.phpファイルを含めるだけです。すべて問題ありません。

問題は、DBへの変換エントリを作成しようとしているときです。私のDB接続クラスには、最初の接続の直後に次の行が追加されています。

 mysql_query("SET NAMES utf8, character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

正しい文字を表示する代わりに、DBで間違った文字セットを使用すると予想される通常のクラッドを取得します。例えば:

Propriétés

それ以外の:

propriétés

ロシア語、日本語などの文字を使い始めないでください。しかし、UTF8を使用しても、単一言語の文字セットが問題になることはありません...

私は何を逃しましたか?含まれている翻訳.phpまたは.htmファイルからの正しい文字がサイトに表示されるため、PHPではないことを私は知っています。これらの問題が発生しているのはMySQLDBを扱っているときだけです。PHPMyAdminは間違った文字でエントリを表示するので、PHPがMySQLに「書き込む」ときに発生すると思います。ここで同様の質問をスタックで確認しましたが、どの回答も(すべて処理されました)私に手がかりを与えません...

また、誰もがinclude $ filenameとeval(file_get_contents($ filename))を使用して速度の違いについて考えています。

4

3 に答える 3

1

これらの文字が適切に表示されていることを確認するために必要なのは、次のとおりです。

/* HTTP charset */
header("Content-Type:text/html; charset=UTF-8");

/* Set MySQL communication encoding */
mysql_set_charset("UTF8");

また、DBエンコーディングを正しいものに設定する必要があります。また、各テーブルのエンコーディングとフィールドのエンコーディングも設定する必要があります。

最後になりましたが、phpファイルのエンコーディングも一致する必要があります。

于 2012-04-06T18:01:28.337 に答える
1

あなたは、「間違った文字セットを使用すると予想される通常のクラッド」が表示されていると言います。しかし、そのクラッドは実際にはすでにUTF8文字列でutf8_encode()を使用して作成されているため、「間違ったエンコーディング」をどこでも使用していない可能性がありますが、UTF8にエンコードしている時間を超えています。

この種の問題を修正するために私が作成したライブラリを調べてみてください。

https://stackoverflow.com/a/3521340/290221

于 2012-04-06T18:07:17.380 に答える
0

そのmysql_set_charset('utf8');ためのmysqlにあります。別のクエリの開始時にクエリを実行します。

于 2012-04-06T18:03:19.920 に答える