7

PHPでそれを行う方法はありますか?

挿入するデータは、印刷するときれいに見えます。

しかし、データベースに挿入すると、フィールドは空になります。

4

3 に答える 3

14
$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セットにない場合)。

于 2011-01-04T15:50:07.137 に答える
8

「ANSI」は実際には文字セットではありません。これは、「データを作成するコンピューターのデフォルトの文字セットは何でも」という簡単な言い方です。したがって、2つのタスクがあります。

  1. 文字セットデータが何を使用しているかを調べます。
  2. 適切な関数を使用してUTF-8に変換します。

#2の場合、私は通常満足していますが、ソースデータがISO-8859-1を使用している場合にもその仕事をすることiconv()ができます。utf8_encode()

アップデート

データが使用している文字セットがわからないようです。場合によっては、そのような地域でMicrosoft Windowsが使用するデフォルトのエンコーディングを通じて、ユーザーの国と言語(スペイン/スペイン語など)を知っているかどうかを把握できます。

于 2011-01-04T15:52:37.827 に答える
3

iconv()変換が失敗した場合、 using は false を返す可能性があることに注意してください。

\nファイルがUNICODEでエンコードされている場合、中国語のアルファベットの一部の文字が間違っていますが、UFT-8の場合はそうではありません。

問題に戻るには、ファイルのエンコーディングがデータベースのエンコーディングと同じであることを確認してください。またutf-8_encode()、すでに utf-8 のテキストを使用すると、不快な結果になる可能性があります。を使用してファイルのエンコーディングを確認してみてください mb_detect_encoding()。残念ながら、この方法は常に機能するとは限りません。私が見ることができる文字エンコーディングの簡単な修正はありません:(

于 2013-12-04T12:03:21.840 に答える