0


0

META値charset = UTF-8は、UTF-8文字が表示されないようにします

基本的に文字を入力できるテキストエリアであるテストプログラムを作成し、送信をクリックすると、文字がMySQLテストテーブルに書き込まれます(PHPを使用)。

テストテーブルは照合がUTF-8です。

このスクリプトは、データベースに「é」または「ú」を書き込みたい場合、正常に動作します。 ただし、次のメタ文を「

1 Answer


1


まず、PHPは通常、Unicode文字セットまたはUTF-8文字エンコードを処理しません。 (の慎重な使用)mb _…​を除いて 関数では、単に文字列をバイナリデータとして扱います。

次に、使用している文字セット/エンコーディングをMySQLクライアントライブラリに伝える必要があります。 「SET NAMES」SQLコマンドがジョブを実行し、さまざまなMySQLクライアント(mysql、mysqliなど)がさまざまな方法でのアクセスを提供します。 http://www.php.net/manual/en/mysqli.set-charset.php

ブラウザとMySQLクライアントは、おそらくデフォルトでlatin1であり、偶然一致します。 MySQLは、latin1バイナリデータをUTF-8に変換することを認識しています。 ブラウザの文字セット/エンコードをUTF-8に設定すると、MySQLクライアントはそのUTF-8データをlatin1として解釈し、誤ってトランスコードします。

そのため、解決策は、ブラウザからPHPへの入力に一致する文字セットにMySQLクライアントを設定することです。

また、テーブルの照合はテーブルの文字セットと同じではないことに注意してください。照合とは、文字列を比較およびソートする方法を指します。 混乱させるもの、これが役立つことを願っています!