2012-03-13 9 views
2

MySQLでは文字列があります。文字列はphpmyadminで正しく表示され、照合順序はutf8_general_ciに設定されています。 、私はプレーンなHTMLを使用してヘッダーを設定しているPHPファイルでPHP経由でMySQLからUTF-8文字列を取得しました。 "????????"

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

PHPファイルはUbuntuのは、Apache 2.2でホストされている、そしてファイルが(++メモ帳を使用して)UTF-8 without BOMに保存されます

@mysql_query("set names 'utf8'", $this->link); 
$r = @mysql_query($query, $this->link); 

それは文字列(VARCHAR 255)を返し、私たち:私はUTF8を使用するように接続を設定した

PHPエコー、それはブラウザに表示されます。

しかし、私はまだ?????実際の言葉の代わりに。

私が逃したかもしれないものを検索することができないようです。あなたの助けが大変ありがとうございます。

=====編集=====

データベース、テーブルとカラムは、3つの異なる照合順序を持つことができ、私はそれらすべてがutf8_general_ciに設定されている、とmysql_set_charset呼び出し(「UTF8」)すぐに接続した後私の問題を解決しました。

これは、今後の同じ問題にぶつかるためのチェックリストとして役立つことを願っています。私は誰かが何かを見逃しているかどうかを確認するために数ヶ月で非常にうまく戻るかもしれません:)

ありがとう、すべての素晴らしい入力。

+0

正しく保存されていますか? –

+0

UTF-8パイプラインを使用してデータを挿入しましたか?出力パイプラインが正しくutf8になっていても、データベースの挿入前/挿入中にデータが破損している可能性があります。 –

+0

他のテキスト(データベースではない)が正しいか疑問符でもありますか? –

答えて

2

テーブルがutf8_general_ciになっていることを確認してください。 データベースとテーブルの文字セットが異なる可能性があります (自分で変更すると発生する可能性があります)。 (PHP> 5.4.0用のUTF-8に設定)PHP 5.4.0 < ためのISO-8859-1に設定されたデフォルトのcharsetパラメータを持っている

とにhtmlentitiesのようないくつかの機能を持つように注意して、

このような

http://php.net/manual/en/function.htmlentities.php

+0

間違っているかもしれませんが、PHP 5.3がこれらの関数のデフォルトのcharsetパラメータをUTF-8に更新したと思います。 –

+0

これはPHP docの便利な部分です: 'htmlspecialchars()と同様に、htmlentities()は変換で使用されるエンコーディングを定義するオプションの第3引数エンコーディングを取ります。省略した場合、この引数のデフォルト値は、5.4.0より前のバージョンのPHPではISO-8859-1、それ以降は5.4.0以降のUTF-8です。この引数は技術的にはオプションですが、コードに正しい値を指定することを強くお勧めします。 ' – zessx

+0

ありがとうございました。私はデータベース、テーブル、カラムが** 3つの異なる照合**を持つことができるという事実を知らなかった。私はすべてをutf8_general_ciに設定し、正しい文字セットを@jeroenが示すように設定して問題を解決しました。 – Gapton

2

私は'utf8'の前後に引用符が間違っていると思いますが、いずれかの方法で、あなただけ使用することができます。

mysql_set_charset('utf8'); 

そして、あなたは彼らのために探しているとき@オペレータとの誤差を抑制することが、良いアイデアではありません。

-1

チェック何かクエリ

mysql_query('SET character_set_results=utf8'); 
mysql_query('SET names=utf8'); 
mysql_query('SET character_set_client=utf8'); 
mysql_query('SET character_set_connection=utf8'); 
mysql_query('SET character_set_results=utf8'); 
mysql_query('SET collation_connection=utf8_general_ci'); 
+0

これはやりすぎです。名前だけで十分です –

-1

前にあなたはそれが???得ることはありませんUTF-8に文字列をエンコードするためにこれを使用することができますが、非を変更しますurf - この/ u003のような8文字あなたは後でそれを解読してテキスト上に提示することができます

while($var=mysql_fetch_assoc($r)){ 
      $e['columnI']=utf8_encode($e['columnI']); 
関連する問題