PHPでそれを行う方法はありますか?
挿入するデータは、印刷するときれいに見えます。
しかし、データベースに挿入すると、フィールドは空になります。
$tmp = iconv('YOUR CURRENT CHARSET', 'UTF-8', $string);
また
$tmp = utf8_encode($string);
奇妙なことに、DBに空の文字列が表示されてしまいます。DBにガーバージが発生することは理解できますが、何も(空の文字列)は奇妙ではありません。
コンソールに次のように入力しました。
iconv -l | grep -i ansi
それは私に示した:
ANSI_X3.4-1968
ANSI_X3.4-1986
ANSI_X3.4
ANSI_X3.110-1983
ANSI_X3.110
MS-ANSI
これらは現在の文字セットの可能な値です。 入力文字列にUTFで許可されている文字が含まれている場合に前に指摘したように、何も変換する必要はありません。
文字を省略したくないが、そっくりさんに置き換える場合は、UTF-8 // TRANSLITでUTF-8を変更します(UTF-8セットにない場合)。
「ANSI」は実際には文字セットではありません。これは、「データを作成するコンピューターのデフォルトの文字セットは何でも」という簡単な言い方です。したがって、2つのタスクがあります。
#2の場合、私は通常満足していますが、ソースデータがISO-8859-1を使用している場合にもその仕事をすることiconv()
ができます。utf8_encode()
データが使用している文字セットがわからないようです。場合によっては、そのような地域でMicrosoft Windowsが使用するデフォルトのエンコーディングを通じて、ユーザーの国と言語(スペイン/スペイン語など)を知っているかどうかを把握できます。
iconv()
変換が失敗した場合、 using は false を返す可能性があることに注意してください。
\n
ファイルがUNICODEでエンコードされている場合、中国語のアルファベットの一部の文字が間違っていますが、UFT-8の場合はそうではありません。
問題に戻るには、ファイルのエンコーディングがデータベースのエンコーディングと同じであることを確認してください。またutf-8_encode()
、すでに utf-8 のテキストを使用すると、不快な結果になる可能性があります。を使用してファイルのエンコーディングを確認してみてください mb_detect_encoding()
。残念ながら、この方法は常に機能するとは限りません。私が見ることができる文字エンコーディングの簡単な修正はありません:(