0

次のようなテーブルにデータがあります (SQLYog に基づく):

(1) µéÁâÓ·Óᡧ

しかし、データを読み取っているフォーラム システムが画面に表示すると、次のようになります。

(2) ต้มยำ ทำแกง</p>

2 番目の出力は正しいもの (タイ語) です。

このすべてのデータをプルして新しいデータベース (MongoDB) にインポートするスクリプトを作成していますが、データをプルしてブラウザーにエコーすると、上記の最初の (1) のような出力が得られます。

これを変換して、挿入 (またはブラウザに出力) したときに (2) のように正しく保存および表示されるようにするにはどうすればよいですか?

(2) のようなテキストを出力することはできませんでしたが、html に含めることで (1) のように出力することができました。

<head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head>

そして、データをエコーするとき:

echo iconv('latin1', 'utf-8', $string);

それは本当に単純なものだと確信していますが、これを解決するのに十分なユニコードなどに精通していません! ありがとう!

アップデート

私は今、一歩近づきました。私は呼びました:

mysql_query("SET NAMES 'utf8'");

そして、次のものを使用して(1)を出力できました:

echo $string;

そのため、PHP で iconv を介してこれを行う必要はなく、接続を介して MySQL が latin1 を utf8 に変換していると思います。

ただし、タイ語の文字出力はまだできません。

4

2 に答える 2

0

スクリプトがデータベース接続に UTF-8 エンコーディングを使用していることを確認する必要があります。また、値を操作するスクリプト内のすべての領域が、マルチバイト文字に対して安全な操作で行われていることを確認する必要があります。最後に、ブラウザーで値を表示している場合は、すでに行っているように、utf-8 のメタ タグを出力する必要があります。

于 2013-05-01T19:37:21.000 に答える
0

I managed to solve this.

The text I was getting from the database was windows-874 (the codepage for Thai). After I googled the Thai codepage that put me on the correct path for converting to utf-8. Once I switched the header to:

header('Content-type: text/html; charset=windows-874');

I was able to see the Thai characters correctly so I then disabled the header again and used:

iconv('windows-874', 'UTF-8', $string);

This converted the windows-874 to utf-8 and the page still displayed correctly even without the header or meta tag.

So... a lesson for character set newbies - find out what codepage your text is likely to be encoded with and then try a conversion from that to utf-8 :)

于 2013-05-01T20:58:46.170 に答える