mysql utf8、php・euc-jp で出力すると、[~]が文字化けする

このQ&Aのポイント
  • mysqlの文字コードはutf8なのですが、phpはeucで出力しています。DBに格納されている文字は文字化けせずに、きちんと表示されているのですが、出力すると「~」が「?」に化けて表示されてしまいます。
  • mysqlの文字コードはutf8ですが、phpはeuc-jpで出力すると、「~」が「?」に化けて表示されます。
  • DBに格納されている文字は文字化けせずに表示されているのですが、phpで出力すると「~」が「?」に化けてしまいます。回避方法をご教授ください。
回答を見る
  • ベストアンサー

mysql utf8、php・euc-jp で出力すると、[~]が文字化けする

タイトルの通りです。 mysqlの文字コードはutf8なのですが、phpはeucで出力しています。 DBに格納されている文字は文字化けせずに、きちんと表示されているのですが、出力すると「~」が「?」に化けて表示されてしまいます。 mysql_query(”SETNAMES ujis″); や mb_language("Japanese"); mb_internal_encoding("EUC-JP"); mb_http_input("auto"); mb_http_output("EUC-JP"); 等も記述しておりますが、どうしても化けてしまいます。 回避方法等ご存知の方がおられましたら、ご教授お願いいたします。

  • PHP
  • 回答数2
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

処理系にWindowsが混入してるとそういう現象が起こるらしいですね。 Windowsが波ダッシュと全角チルダを混同してることと、euc-jpには全角 チルダなんて無いことが諸悪の根源とか。 > DBに格納されている文字は文字化けせずに、 UNICODE対応環境で見ても区別付きませんよ。見た目一緒だから。 どこかで全角チルダを波ダッシュに変換してやる必要があるわけですが、 適切な場所でeuc-jpのかわりにeuc-jp-winと唱えるのが効くって噂です。

参考URL:
http://kaede.to/~canada/doc/ococaeo
fudomumu
質問者

お礼

>処理系にWindowsが混入してるとそういう現象が起こるらしいですね。 >Windowsが波ダッシュと全角チルダを混同してることと、euc-jpには全角 >チルダなんて無いことが諸悪の根源とか。 そうなんですか、とても勉強になります! >UNICODE対応環境で見ても区別付きませんよ。見た目一緒だから。 そうなんですね…無知でお恥ずかしいです…。 >どこかで全角チルダを波ダッシュに変換してやる必要があるわけですが、 >適切な場所でeuc-jpのかわりにeuc-jp-winと唱えるのが効くって噂です。 ありがとうございます。参考URLのサイト、とても参考になりました。 SET NAMES eucjpms にしたら文字化けせずに表示されました!! ずっと悩んでたので本当に大感謝です。 ありがとうございました!

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

> mysql_query(”SETNAMES ujis″); SET と NAMES の間に空白が必要だと思います。 空白を入れて文字化けしなくなるかどうかは、わかりません。

fudomumu
質問者

お礼

> SET と NAMES の間に空白が必要だと思います。 > mysql_query(”SETNAMES ujis″); すみません。上記は他のサイトから持ってきたので、 私の記述は間違っておりません。

関連するQ&A

  • php,mysqlでの文字化け(機種依存文字)について

    機種依存文字「○いち」「(株)」の文字化けがどうしても解消できません。 phpソースに機種依存文字をコーディングした場合には正しく表示されますが、外部より入力した文字をMySQLに格納し、phpにてデータを取り出し表示すると文字化けします(phpmyadminでの表示時点で文字化け)。 「mb_convert_encoding」等にてテストしてみましたが、結果は変わりませんでした。また、phpmyadminにて直接MySQLに入力しても、phpmyadminでもブラウザ(php表示)でも文字化けしてしまいます。 文字コードについて知識が浅く、各環境はデフォルト状態です。 「mbstring.internal_encoding = EUC-JP 」にも関わらず、「character_set_client = utf8」「character_set_results = utf8」としているのに、機種依存文字以外は問題無く表示されております。 1.機種依存文字化けの対応方法 2.正しい環境設定方法(文字コードの統一を行うべき等) ご教授のほど、何卒宜しくお願い致します。 <<環境>> ・windows xp ・UNIX socket 4.1.22 ・phpMyAdmin - 2.11.1 ・Mysql 4.1.21 ・PHP 4.4.7 【Mysql】 character_set_client = utf8 character_set_connection = utf8 character_set_database = utf8 character_set_results = utf8 character_set_server = ujis character_set_system = utf8 【my.cnf】 [client] default-character-set = ujis [mysqld] default-character-set = ujis [mysqldump] default-character-set = ujis 【php.ini】 mbstring.language = Japanese mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = EUC-JP mbstring.internal_encoding = EUC-JP mbstring.detect_order = auto mbstring.substitute_character = none; ※phpソースには「charset=euc-jp」を記載

    • 締切済み
    • PHP
  • Fedora7+PHP+MySQLで文字化け

    すみません、表題にてPHP側でCSVファイルをINSERTで登録していますが、どうしても文字化けしてしまいます。 Fedoracore7 PHP5.2.2 MySQL5.0.37 phpMyAdmin2.11.0 <php.ini> mbstring.internal_encodein = EUC-JP mb・・・output = EUC-JP <my.cnf> [client]、[mysqldump]、[mysql]ともに default-character-set = ujis [mysqld] default-character-set = ujis skip-character-set-client-handshake init-connect = SET NAMES ujis 色々と調べてEUC-JP(ujis)で統一してるつもりなのですが・・・ phpmyadminでは文字化けは解消してまして、こちらでレコードを登録すると、PHP側では文字化けなしで表示されます。 PHP側での書き込みは、 mb_convert_encoding($val,"EUC-JP","SJIS") で行っていますが、文字化けが解消されません。 どなたかご教授頂ければと思い、質問させて頂きました。 宜しくお願いします。

    • 締切済み
    • PHP
  • UTF-8で文字化け

    いつもお世話になっております。 全てのファイルをEUC-JP で作成しております。 Googleマップを使用することになり、1ページだけ UTF-8 で出力したいと思います。 php.ini の設定は以下のようになっております。 -------------------------------------------------- default_charset EUC-JP mbstring.detect_order no value mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output EUC-JP mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.substitute_character no value -------------------------------------------------- Googleマップを出力するページで以下のようにしたのですが 文字化けが直りません。 map.php -------------------------------------------------- ini_set("default_charset", "UTF-8"); mb_internal_encoding("UTF-8"); 他に設定する箇所はありますでしょうか。 よろしくご教示お願いいたします。 <環境> PHP:4.3.1

    • ベストアンサー
    • PHP
  • PHP フォームからのデータが文字化け

    PHPにて簡単な以下のようなアプリを勉強がてら作っています。 1.登録フォームを表示 2.確認画面表示 3.DB(MySQL)にデータ登録 そこで質問なのですが、フォームから入力し確認画面を表示するときに、フォームから入力した文字が文字化けしてしまいます(正確には文字化けする時としない時があります)。 出力ページはSmartyを使っています。 テンプレートはUTF-8を使っており、テンプレート内の文字は文字化けしません。PHPソースもUTF-8で書いてあります。 各PHPソースには mb_language("uni"); mb_internal_encoding("UTF-8"); mb_http_output("UTF-8"); と記述しています。 DB(MySQL)のテーブルはUTF-8にしてあります。 1点気になるのは、某ホスティングサービス上で作っているのですが、PHPinfoで見てみるとmb_internal_encodingはEUC-JPになっています。 今回UTF-8で作りたいのですがどうしたら良いのでしょうか? 環境は、 Apache 1.3.34 / PHP 4.3.7 / MySQL 4.1.21 です。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • PHP+MySQL 4.1.20における文字化け

    お世話になります。 現在、学内に実験的に設置されているサーバーを使って、そこに 「phpMyFAQ(Ver.2.0.3)」を入れて動かそうと試みています。 phpMyFAQのインストールは済んだのですが、いざ使ってみようと思って カテゴリ追加等をしようとすると、日本語が文字化けして「???????」と いうような状態になります。 きっと文字コードの設定に問題があり、php.iniやmy.cnf等の設定を変える 必要があるのでしょうが、サーバーは共用利用しているものであり、他の 利用者へ影響が出てしまうため、変更が困難です。 また、私自身がまだphpやMySQLに詳しくないため、どこを改善すればよい のかがわからずに困っております。(.htaccessをつくっていろいろと記述 してみたりしたのですが、文字化けは解消されていません。) もし何かアドバイス等ありましたらご教示いただけませんでしょうか。 よろしくお願いいたします。 MySQLのバージョン:4.1.20 PHPのバージョン :4.3.9 <MySQL> character_set_client ujis character_set_connection ujis character_set_database ujis character_set_results ujis character_set_server ujis character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none;

  • MySQL文字コード

    DB情報をHTMLで表示する場合に、mb_convert_encoding()で指定する文字コード MySQL5.1 PHP5 HTML - shift_jis MySQL の文字セット UTF-8 Unicode (utf8) MySQL の接続照合順序: ujis_japanese_ci フィールドの照合順序 ujis_japanese_ci PHPプログラムでDB情報取得後にSJISに変換 mb_convert_encoding($String, "SJIS", "●●●"); ●●●の文字コードを何を指定すればいいのかがわかりません。 EUCを書くとうまくいってるような気もしますが、なぜEUCでうまくいく のかもわかりません。 ご教授下さい。

    • 締切済み
    • PHP
  • MySQLインサートで文字化け

    初めてXAMPPを使って、Windowsローカル上でシステムを作っているのですが、MySQLへINSERTするとどうしても文字化けを起こしてしまい困っています。(その他のHTML表示は問題ありません) 本番用のサーバーがEUC-JPなのでEUC-JPでやらなければならず、まずはMySQL等の設定ファイルを下記サイトに従ってむりくりEUC-JPに変えました。 http://phpspot.net/php/pgMySQL4.1%8CnEUC-JP%82%CC%8F%EA%8D%87.html http://cl.pocari.org/2006-06-17-1.html PHP呼び出しをして返ってくるHTTPヘッダーはいつもUTF-8のようなのでApache/conf/下のhttpd.confをいじろうと思ったのですが外部confファイルのInclude記述ばかりで該当箇所が分かりません。 環境は以下の通りです XAMPP Windows版 Version 1.6.4 Apache Version Apache/2.2.6 (Win32) php ver PHP: 5.2.4/php4互換モードにて使用 phpMyAdmin - 2.11.1 * MySQL クライアントのバージョン: 5.0.45 □phpMyAdmin上の設定 言語 - Language: 日本語-Japanese (euc) MySQL の文字セット: EUC-JP Japanese (ujis) MySQL の接続照合順序:eucjpms_japanese_ci □Apache Environment HTTP_ACCEPT_LANGUAGE ja,en-us;q=0.7,en;q=0.3 HTTP_ACCEPT_CHARSET Shift_JIS,utf-8;q=0.7,*;q=0.7 □PHPの設定 mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input EUC-JP mbstring.http_output EUC-JP mbstring.internal_encoding SHIFT-JIS mbstring.language Japanese mbstring.strict_detection Off mbstring.substitute_character no value そもそも設定環境として難しいのでしょうか・・ どなたか勘所のある方宜しくお願いします。

    • ベストアンサー
    • PHP
  • mysql登録時の文字化け

    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")) よろしくお願いします

    • ベストアンサー
    • PHP
  • PHPとmysqlでの文字化けについて

    現在PHPとMySQLを利用したwebシステムを作成しています。 しかし文字化けが発生して困っています。こちらの環境は PHP5.1.4 MySQL5.1.11 phpMyAdmin - 2.8.0-rc1 レンタルサーバー(xrea)を使っています。 自分でいろいろと調べたところ文字のエンコードはujisに統一したほうがいいとのことまではわかりました。 show variables like "char%"; を実行したところ character_set_client utf8 character_set_connection sjis character_set_database ujis character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 このように表示されます。 PHPの方も <?php header('Content-Type:text/html; charset=EUC-JP'); ?> や <?php $str = mb_convert_encoding($str, "EUC-JP", "auto"); ?> を実行しても日本語の部分は???で表示されてしまいます。 いろいろと調べたのですが、さっぱり原因がわかりません。 よろしくお願いします。

  • PHPでUTF-8からEUC-JPにエンコディングしたときに、一部の文

    PHPでUTF-8からEUC-JPにエンコディングしたときに、一部の文字が文字化けしてしまいます。(1)という文字です。データベースをEUCで作っていて、すでに色々なデータが入っているので、データベースをUTF-8とするわけにもいかないでの、なんとかEUCで保存しようとしているのですが・・・。 "テスト(1)"(UTF-8)をmb_convert_encodingでEUCにして、保存しますと、"テスト?"となっています。 テスト(1)をUTF-8の状態でブラウザで確認しますと、文字化けしないできちんと「テスト(1)」と表示されます。やはり、Mysqlに保存するときに文字化けしています。どなたか、似たような経験のある方がおりその原因がお分かりでしたら、教えてください。SJISにあるようなダメ文字というものなのでしょうか。確か「まぐまぐ」というメルマガの編集でも(1)という文字は使えませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう