
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に書き出し
という流れになっています。
中国語のサイトを作られている方は少ないと思いますが、分かる範囲でアドバイスをいただければと思います。よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
中国語の文字コードを詳しく知らないのですが、中国語をEUCにするってのはそもそも間違えているのではないでしょうか。
多国語を扱う場合は素直にDBもソースもUTF-8などにしてしまった方が良いかと思います。
何が何DBはEUCで!!
って場合は、文字データをバイナリの状態で(BLOG型)に入れてやったりする必要があると思います。
出力形式を変えたり、それぞれの文字コードを把握しないといけないなどかなりめんどくさいと思います。
また、予想できない問題がいろいろあるんじゃないかな?と思います。
この回答への補足
そうなんです。最初にUTF-8にするべきでした。ただ、日英のシステムを組んでいたときはまだ知識が少なかったため、EUCを選んでしまいました。
テーブルごとに文字コードが変えられたらいいですけどね。すでにシステムは動いており、後にはひけない状況だといえます。
BLOG型ではななく、BLOB型でしょうか?
それを一度試してみたいと思います。
症状としては、shift-jisで特定の文字だけ文字化けしてしまう、といったのと似ており、GB2312で特定の文字だけ文字化けしてしまうという感じです。
結局、
SJIS
ではなく、
sjis-win
にすることで解決できました。
また、また今後のために文字データをBLOB型で保存することにしました。
現状では、
管理者画面(入力):sjis-win → DB:GB(EUC/BLOB型)
管理者画面(出力):DB:GB(EUC/BLOB型) → sjis-win
中国語サイト:DB:GB(EUC/BLOB型) → GB
という感じで処理することにしました。
BLOB型にするメリットがいまいち分かっていないまま、こうしてみたのですが、全然違うものなのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- その他(プログラミング・Web制作) ゲームを日本語化しようとすると文字化けしてしまいます。 2 2022/08/19 15:36
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- 中国語 新しい中国語入力ソフトを発明しました 22 2023/02/06 07:13
- Java VScodeのターミナルの文字化けについて 1 2022/09/27 22:19
- 大学受験 長文失礼します 高3受験生女 愛知教育大学理科 (偏差値50 国立)志望です。 先週の共通テスト模試 5 2022/09/13 00:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像ファイル変換(Tiff→PDF)
-
c++でmatからvectorへの変換の...
-
ホームページビルダー 文字化け
-
エクセルVBAの自動変換機能?
-
マンセル⇔XYZ,RGB変換式或いは...
-
3のつく数字と3の倍数のみを表...
-
phpで緯度経度の変換を行いたい
-
なぜ通信には16進数文字列が使...
-
動画の画質劣化を抑える方法は?
-
旧暦の取得
-
VBA 置き換え後元に戻したい時
-
緯度、経度の 10進法と 60進法...
-
アセンブラ言語の数字を数値に...
-
OracleからMySQLへのSQL文の変換
-
C#のピクチャボックスにCLIのHB...
-
CIDコードからUNICODEへの変換...
-
変換中の文字を表示させず、IME...
-
逆ジオコーディング機能
-
逆コンパイルと逆アセンブルの...
-
ハフ変換により円の検出方法はh...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
家電製品の電力周波数を変える機械
-
エクセルVBAの自動変換機能?
-
マンセル⇔XYZ,RGB変換式或いは...
-
なぜ通信には16進数文字列が使...
-
分を時間に変換するプログラム
-
緯度、経度の 10進法と 60進法...
-
【EXCEL】カナ、ひらがなを英字...
-
10進数をBCDに変換する方法
-
FortranをC++(VC++)へ変換
-
VB 6 を VS 2012に変換するには?
-
シーケンサのCPUはニーモニック...
-
VB6からVB2010への変換について
-
StrConvの使い方について教えて...
-
VB.NETをJavaに変換するツール...
-
Mac 乗数の入力方法
-
VB6で10進数を32進数に変換する...
-
画像ファイル変換(Tiff→PDF)
-
isoをimgに変換したいのですが...
-
C/C++→JAVAに変換するツール
-
UTF8→ShiftJISに変換したいです!
おすすめ情報