2011-01-25 14 views
0

私はアラビア語のデータを持つページテーブルの列を持っています。奇妙なMySQLのエンコーディングの問題

私はこれを行う場合は...

@mysql_query("select title from pages where web_id = '$id'"); 

私はアラビア語で、正しいデータを取得します。

しかし、同じ関数をもう一度呼び出すと、実際にはループになってしまいます。2回目にはガベージデータが表示されます。

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

私はいつもにも最初の呼び出し時に、ゴミデータを取得:そのクエリの前に、私はこれのいずれかを実行している場合、また、この

"تنظيم الأوقا٠العامة اقرأ قطاع 

のようなものを探しています。ここで何が起こっていますか?あなたのフィールドが実際にUTF-8のデータが含まれているかどうかを確認する必要があり、データベース、テーブルとフィールドの照合順序が

答えて

1

いくつかのランダムなヒント:

@演算子を使用しないようにしてください。エラーメッセージは表示されません。

あなたは適切に入力パラメータをエスケープする必要があります:あなたのPHPのソースコードがUTF-8で保存されていることを確認し

$res = mysql_query("SELECT title FROM pages WHERE web_id = '" . mysql_real_escape_string($id) . "'"); 
if(!$res){ 
    die('Could not fetch page title'); // See mysql_error() for error message 
} 

mysql_query("SELECT title FROM pages WHERE web_id = '" . mysql_real_escape_string($id) . "'"); 

あなたはmysql_query()の戻り値をチェックする必要があります。まともなエディタを使用すると、UTF-8として保存でき、ステータスバーに現在のエンコーディングが表示されます。

テーブル定義を確認してください。 MySQLではテーブルとカラムのエンコーディングを設定できます。

connetionエンコーディングをmysql_set_charset()に設定します。

ブラウザがページをUTF-8としてレンダリングすることを確認してください。 PHPでは、適切なHTTPヘッダーを次のように生成できます。

header('Content-Type: text/html; charset=utf-8'); 
+0

IDはすでにエスケープされています。戻り値があります。 PHPコードがutf-8として保存されています。ページはutf-8エンコーディングで表示されます。すでに述べたように、私はmysql_set_charset()を試してみました。 – HyderA

0

をutf8_binように設定されていること

注意。 UTF-8に設定されていても、データを正しくインポートしていないか、データが破損している可能性があります。あなたは使用して、特定のバイトストリームを見ることができます。

SELECT hex(myfield) FROM mytable; 

あなたがデータをインポートした場合は、データファイルが別のエンコーディングであると解釈されている可能性があることに注意してください - 確かにそれもやるだったかもしれません。あなたは、例えば、ファイルが正しく認識されていることを確認する必要があると思います。:

mysql --default-character-set=utf8 database < mydbbackup.sql