データベース、フォーム送信、およびソースコード文字列リテラルがすべて関係しているため、ここでは多くの問題が発生する可能性があります。他の一般的なエンコーディング(CP1252、Latin1)では、json_
を使用するときに失敗するため、UTF-8を使用することを想定します。 または、200を超える異なる文字を受け入れます。
最初に行うことは、削除です。 エンコーディングの問題を修正することを目的として作成された、あらゆる種類の変換などのコード。 utf8_encode
など 、htmlentitites
、*_replace
.. なんでもいい。
ソースエンコーディング。
$str = "· Close up the server";
上記を作成する場合、PHPソースファイルはUTF-8で物理的にエンコードする必要があります。 Windowsを使用している場合は、これを明示的に実行または構成する必要があります。 UTF-8はWindowsでは魔法のようには起こりません。
フォーム送信
ユーザーがフォームを送信すると、ペイロードは、ページを宣言したエンコードになります。次のように宣言できます:
header("Content-Type: text/html; charset=utf-8");
ただし、実際には誰でもサーバーに任意のバイトを送信できるため、続行する前に入力がUTF-8であることを確認する必要があります。 mb_check_encoding
良いです。
データベース
この時点でデータはUTF-8として受信されるため、入力文字列はUTF-8になります。これは、データベースに接続した後、接続エンコーディングを指定して指定する必要があります。
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");
これにより、データベースはUTF-8で入力を読み取り、その出力をUTF-8でエンコードします。また、列/テーブル/データベースもUTF-8に設定することをお勧めします。
Unicodeエスケープシーケンス\uxxxx
または\uhhhh\ullll
または\Uxxxxxxxx
PHPではサポートされていません。