次のことを確認することで、クエリを機能させることができるはずです。
UTF-8用のPHPの準備
最初に、これらのクエリを発行するPHPページがUTF-8でエンコードされたページとして提供されていることを確認する必要があります。これにより、データベースからのUTF-8出力が正しく表示されます。Firefoxでは、関心のあるページにアクセスして[ページ情報の表示]メニュー項目を使用することで、これが当てはまるかどうかを確認できます。これを行うと、ページのエンコーディングの値としてUTF-8が表示されます。ページがUTF-8として提供されていない場合は、2つの方法のいずれかで提供できます。次のように、の呼び出しでエンコーディングを設定できます。header()
header('Content-Type: text/html; charset=UTF-8');
または、ページのブロックmeta
でタグを使用できます。head
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
MySQLforUTF-8の準備
次に、データベースがUTF-8エンコーディングを使用するように設定されていることを確認する必要があります。これは、サーバー、データベース、テーブル、または列のレベルで設定できます。共有ホストを使用している場合は、階層のテーブルレベルと列レベルしか制御できない可能性があります。サーバーまたはデータベースを制御している場合は、次の2つのコマンドを発行して、それらが使用している文字エンコードを確認できます。
SHOW VARIABLES LIKE 'character_set_system';
SHOW VARIABLES LIKE 'character_set_database';
データベースレベルのエンコーディングの変更は、次のようなコマンドを使用して実行できます。
(CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8;
テーブルで使用されている文字エンコードを確認するには、次の手順を実行します。
SHOW CREATE TABLE myTable;
同様に、テーブルレベルのエンコーディングを変更する方法は次のとおりです。
(CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8;
階層内で可能な限り高いエンコーディングを設定することをお勧めします。このように、新しいテーブル用に手動で設定することを覚えておく必要はありません。これで、テーブルの文字エンコードがまだUTF-8に設定されていない場合は、次のalter
ようなステートメントを使用して変換を試みることができます。
ALTER TABLE ... CONVERT TO CHARACTER SET utf8;
このステートメントの使用には十分注意してください。テーブルにすでにUTF-8値がある場合、変換しようとすると破損する可能性があります。ただし、これを回避する方法はいくつかあります。
MySQLiにUTF-8の使用を強制する
最後に、データベースに接続する前に、適切な呼び出しを発行して、UTF-8エンコーディングを使用していることを確認してください。方法は次のとおりです。
$db = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
// Change the character set to UTF-8 (have to do it early)
if(! $db->set_charset("utf8"))
{
printf("Error loading character set utf8: %sn", $db->error);
}
これを行うと、すべてが期待どおりに機能するはずです。エンコーディングについて心配する必要がある唯一の文字は、HTMLのビッグ5です<, >, ', ", and &
。これは、 htmlspecialchars()関数を使用して処理できます。
詳細を読みたい(そして追加のリソースへのリンクを取得したい)場合は、このプロセスについて書いた記事を自由にチェックしてください。UnicodeとWeb:パート1、およびUnicodeとWeb:パート2の2つの部分があります。幸運を!