Unicodeテキストに関連していると思われる問題が発生しています。ユーザーがUnicodeの箇条書き文字を含む文字列を入力すると、mysqlはそのフィールドを保存できません(ただし、残りの更新クエリは機能します)。これが私がそれに対処しようとしてきた方法です。
$str = "· Close up the server";
$str = preg_replace("\u2022", "•", $str);
...しかし、これはまだ機能していません。
データベース、フォーム送信、ソースコード文字列リテラルがすべて関係しているため、ここでは多くの問題が発生する可能性があります。他の一般的なエンコーディング(CP1252、Latin1)では、json_
200を超える異なる文字を使用または受け入れる場合に問題が発生するため、UTF-8を使用することを想定します。
最初に行うことは、エンコーディングの問題を修正することを目的として作成されたあらゆる種類の変換などのコードを削除することです。、、、..何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ではサポートされていません。
\u2022
UTF-16
「Bullet」の16進エンコーディングです。ありませんUTF-8
。
SET NAMES 'UTF-8';
データベースを開く前に、文字セットを変更することもできます。