重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

PHPで作成した登録フォームで入力されたデータをmysqlに登録すると、文字化けというか?になってしまいます。すべての文字を検証したわけではないのですが、どうも環境依存文字が?になってしまうようです。環境依存文字を登録するにはどうしたらいいでしょうか?


ちなみに、現在の文字コードは
HTMLの<head>の部分に<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

PHP開始時に
mb_language("uni");
mb_internal_encoding("utf-8");
mb_http_input("auto");
mb_http_output("utf-8");

ただし、PHPの設定ファイルがさわれないのでPHP使用時の内部文字コードは恐らくデフォルトのEUC

mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci


ファイルの保存形式はutf-8(BOMなし)


SQL文のデータ部分にmb_convert_encodingを使用
例:
insert into test(test1,test2) values(
mb_convert_encoding("テスト1","EUC-JP","UTF-8"),
mb_convert_encoding("テスト2","EUC-JP","UTF-8"))


よろしくお願いします

A 回答 (3件)

とりあえず、


mb_convert_encoding("テスト1", "EUCJP-win", "UTF-8")
としたら機種依存文字も?にならなくなるかとおもいます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。


早速、以下のように試してみましたがDBには?で登録されていました。

insert into test(test1,test2) values(
mb_convert_encoding("テスト1", "EUCJP-win", "UTF-8"),
mb_convert_encoding("テスト2", "EUCJP-win", "UTF-8"))

お礼日時:2010/03/11 09:39

適切な答えは出来ませんが、僕も似たようなトラブルがあったので念のため。



SQL文のカラム名をバッククオートでくくると回避できたりしませんか?

僕はPostgreSQLからMySQLへ変更する際にでくわしたのですが、元のテーブルのカラム名にMySQLの予約語が含まれていて、MySQL仕様のバッククオートでくくる処理を行なったら回避できました。

ちょっととんちんかんな答えなのかもと思いつつ・・・
    • good
    • 0

とりあえず、あれ?と思った部分だけ、ツッコみ入れておきます。



> mysqlの文字コードとしては、DB,テーブルともにutf8_unicode_ci

> SQL文のデータ部分にmb_convert_encodingを使用
> 例:
> insert into test(test1,test2) values(
> mb_convert_encoding("テスト1","EUC-JP","UTF-8"),
> mb_convert_encoding("テスト2","EUC-JP","UTF-8"))

EUC-JP で DB に 書き込んでないですか。これ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

登録フォーム画面もDBも文字コードをUTFー8にしてあるので、そのまま登録できると思ったのですがその場合は?ではなく完全な文字化けになってしまったので上記のような変換をおこなっています。
確かに、普通に考えたらおかしいのですがなぜか環境依存文字以外は文字化けせずに登録されています。

お礼日時:2010/03/09 17:08

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