プロが教えるわが家の防犯対策術!

PHPとMySQLで中国語のサイトを作っているのですが、データベースから読み出した文字列が、GB2312に変換後一部の文字だけ「?」になってしまいます。

このサイトでは中国語以外に、既に日英のサイトがあってそれらは、

日:WEB = SJIS / DB = EUC
英 : WEB = UTF-8 / DB = EUC
中 : WEB = GB2312 / DB = EUC

という構成になっています。
ちなみに管理者画面では、日、英、中、全てのコンテンツを編集できるようになっていて、文字コードは、shift-jisにしてあります。

ですので、中国語のコンテンツを書き出すときは、

管理者画面:shift-jis

PHP処理:EUCに変換

DB:EUCで登録



DB:EUC

PHP処理:GB2312に変換

HTMLに書き出し


という流れになっています。
中国語のサイトを作られている方は少ないと思いますが、分かる範囲でアドバイスをいただければと思います。よろしくお願い致します。

A 回答 (1件)

中国語の文字コードを詳しく知らないのですが、中国語をEUCにするってのはそもそも間違えているのではないでしょうか。



多国語を扱う場合は素直にDBもソースもUTF-8などにしてしまった方が良いかと思います。

何が何DBはEUCで!!
って場合は、文字データをバイナリの状態で(BLOG型)に入れてやったりする必要があると思います。

出力形式を変えたり、それぞれの文字コードを把握しないといけないなどかなりめんどくさいと思います。
また、予想できない問題がいろいろあるんじゃないかな?と思います。

この回答への補足

そうなんです。最初にUTF-8にするべきでした。ただ、日英のシステムを組んでいたときはまだ知識が少なかったため、EUCを選んでしまいました。

テーブルごとに文字コードが変えられたらいいですけどね。すでにシステムは動いており、後にはひけない状況だといえます。

BLOG型ではななく、BLOB型でしょうか?
それを一度試してみたいと思います。

症状としては、shift-jisで特定の文字だけ文字化けしてしまう、といったのと似ており、GB2312で特定の文字だけ文字化けしてしまうという感じです。

補足日時:2005/11/22 11:13
    • good
    • 0
この回答へのお礼

結局、

SJIS

ではなく、

sjis-win

にすることで解決できました。
また、また今後のために文字データをBLOB型で保存することにしました。

現状では、

管理者画面(入力):sjis-win → DB:GB(EUC/BLOB型)
管理者画面(出力):DB:GB(EUC/BLOB型) → sjis-win
中国語サイト:DB:GB(EUC/BLOB型) → GB

という感じで処理することにしました。
BLOB型にするメリットがいまいち分かっていないまま、こうしてみたのですが、全然違うものなのでしょうか?

お礼日時:2005/11/22 14:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!