• 締切済み

発生した文字化けに対する対処

現在GoogleMapを用いたコミュニケーションツールを作成しており、 GoogleMapに対する操作をjavascript、 任意に配置したマーカーに対してフォームに入力されたユーザーのクチコミ情報 などのデータ更新関係をPHPで行っています。 (GoogleMap ⇔ javascript ⇔ PHP[4.4.2] ⇔ DB[mySQL]) 問題はDBへ場所情報(マルチバイト文字)を保存する時と画面へ呼び出す 時とで文字化けをしてしまうことです。 いろいろなページを参考に調べていくと「文字コードの不統一が原因」とされていて ファイルの文字コードを変換してアップロードする、またはエンコード処理を行う、 など書かれているのですが、私のケースで何をどう処理を施せばいいのかわからないのでどうか教えて下さい。 ・統一する文字コードは?  :参考にしているGoogleMapの本のサンプルでは   PHPで行ったDB問い合わせ結果をjavascriptへ受け渡す際、JSONで行っています。   その関係で文字コードは「UTF-8」に統一、的な図式になっているのですが、   統一するのはUTF-8でよいのでしょうか? ・どこで設定?  :PHPではSQL発効のみ行っているいるのですが、その問い合わせ結果に対して   mb_convert_encodingなどの処理が必要なのでしょうか?   本のサンプルでは処理の始めに以下の記述があることでOKというような   感じで書かれているのですが...   header("Content-type: application/json");   ini_set("mbstring.script_encoding", "utf-8");   ini_set("default_charset", "utf-8"); ・対象となるファイルは?  :html,js,phpすべての関連ファイルの文字コードを変換してアップロードしなければならないのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

誰もレスをつけないので(笑。 文字化けを起こした場合、文字コードについては基本的に細かく設定していく必要があると思います。 php.iniや.htaccessだけで文字コードを設定してもなかなか文字化けは回避出来ません。 また、phpファイルやJSONの文字コードと、実際書かれているスクリプトの文字コードが一致しないのも文字化けの原因です。 更に、MySQLは特に4.1以降では、マルチバイト対応になったおかげで逆に文字化けしやすかったりします。 全てをUTF-8に統一出来れば完璧でしょうが、サーバ環境や、MySQLの設定まで及びます。なかなか簡単ではないと思います。 文字化けが発生した場合、出来るだけ明確に、明示的にしながら設定して行く事が良いと思います。 例えば、外部からの変数はUTF-8に統一、内部文字エンコードとファイルはEUC-JP(LinuxやMySQLのデフォルトはEUCが多い)で統一、出力はUTF-8に再エンコード、と言うような具合です。 また、GoogleMapsに関しては、 <script src="http://maps.google.com/maps........." type="text/javascript" charset="UTF-8"></script> として外部文字エンコードを明示的にUTF-8と指定すれば、EUC-JPやSJISのページからでも問題なく表示されます。 参考まで。

関連するQ&A

  • 文字化けが発生する

    Apache 2.0.54、PHP 5.0.4それから、MySQL 4.1.14でPHPのテスト環境をWindowsXP上に作りました。PHPとMySQLの設定ファイルで文字コードを、UTF-8に統一してほかのMySQL(4.0.12)からダンプしたファイルをUTF-8に変換した後にMySQL 4.1.14にインポートしました。 phpMyAdmin上からは文字化けなしにインポートしたファイルが見れるのですが、なぜか自分で書いたPHPスクリプトではデータ部分がすべて「?」に変わってしまいます。ブラウザの文字コードを変えても?で、試しにそのデータ部分のエンコードをPHP上から調べてみると「ASCII」になっていました。また、MySQLの環境変数のcharacter関係の変数はすべてUTF-8になっています。 データをUTF-8で出力したいのですが、どのようにすればいいでしょうか? 下が、コマンドラインから変数を参照した結果です。 mysql> SHOW VARIABLES LIKE 'char%'; +--------------------------+------+ | Variable_name | Value| +--------------------------+------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\ MySQL\MySQL Server 4.1\share\charsets/ | +--------------------------+------+

    • ベストアンサー
    • MySQL
  • サーバーにアップすると文字化けする

    PHPで作成したWebサイトをブロバイダーのサーバーにアップして表示すると文字化けします。 ローカル環境では、php.iniの設定で、エンコードをUTF-8としていますが、「サーバー環境はWindowsサーバをベースとしており、WEBサーバはIIS(7.0)となるため、各サイトごとにphp.iniファイルを設定することはできない。 (サーバ内にアップロードされてもPHPから読ませることはできません。)」 とブロバイダに言われました。 どうしたらよいのでしょうか? ちなみに、ローカル側のエンコードをjisにすれば問題ないのかもしれませんが、いまいちphp.iniの設定に自身がないのです。 今の状態は以下の通りですが、どこをどう変更すればよいのでしょうか? よろしくお願いします。 **************************************************** default_charset = "UTF-8"       出力文字コード mbstring.internal_encoding = UTF-8  PHP内部の文字コード mbstring.http_input = auto       HTTP入力の文字コード mbstring.http_output = pass      HTTP出力の文字コード mbstring.encoding_translation = Off  HTTP入力の文字コードの自動変換 ****************************************************

    • ベストアンサー
    • PHP
  • 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
  • EC-CUBEでの文字化け

    EC-CUBE初心者です。 ローカルのwindowsマシンにEC-CUBEをインストールしてみたんですが 管理画面の一部が文字化けしてます。 例えば”基本情報管理>SHOPマスター”のSHOP住所 の都道府県のコンボボックスの中身が”???”と なっています。 どこの設定がおかしいのでしょうか? 環境 ●EC-CUBE →2.11.4 ●MySQL →5.1.33 ●Apache →2.2.11 ●PHP →5.2.9 尚、mysqlの文字コードはUTF-8で show variables like 'character_set%';を実行したところ character_set_client →   utf8 character_set_connection→ utf8 character_set_database → utf8 character_set_filesystem →  binary character_set_results → utf8 character_set_server → utf8 character_set_system → となっております。 DBの文字コードがutf8 になっているとは思うのですが あとはphp.iniの設定かなとは思うのですが いろいろやってはいますがうまくいきません。 ご教授お願いします。

  • 文字コードを揃えているはずなのに文字化け?

    プログラム初心者です。 PhpMyAdminでテーブルを作ってそこに接続するスクリプトを書くと 結果の日本語が文字化けしてしまい困っています。 SQLのコマンドラインツールからshow variables like 'char%'; で現在の文字コードに関する設定を確認してみたら +--------------------------+--------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | C:\xampp\mysql\share\charsets\ | +--------------------------+--------------------------------+ 以上の様にcharacter_set_filesystem以外はUTF-8になっているのですが なぜ文字化けしてしますのでしょうか? このcharacter_set_filesystemをUTF-8にしないとそうなってしまうものなのでしょうか。 スクリプトはTerapadを使用しUTF-8で保存しています。 手持ちのPHPの参考書によると、文字化けの発生には以下の5箇所があるといいます。 1、HTTPリクエスト 2、PHPファイル内での文字列読み込み 3、DBアクセス 4、MysqlからApacheの問い合わせに対するレスポンス 5、HTTPレスポンス 現在この5つのうちのどこに原因があって文字化けしているのでしょうか? 3のDBアクセス時かな?と思って 参考書に従ってphp.iniや.htaccessを設定したつもりですが解消しません。 環境設定だけで一日仕事になってしまいました(汗) お詳しい方、どうかお知恵をお貸し下さい。 原因と対策を教えて下さると助かります。 情報の過不足があればご指摘ください、よろしくお願いいたします。 当方の環境  ■php 5.4.7  ■mysql 5.0.10  ■Apache 2.4.3

    • 締切済み
    • PHP
  • PHPの文字化けについて

    いつもお世話になってます。 以下の様な問題が発生しておりまして、 何か解決するための情報がありましたらご提供頂けませんでしょうか。 ------------ PHPで、テキストボックスと登録ボタンを配置した簡単な入力フォームを作成しました。 (登録ボタン押下後は入力した文字を消すことはせず、 DB側に登録した内容をテキストボックスに表示するような形式です。) ところがテキストボックスに「能」と言う文字を入力すると、 文字化けを起こし、「??」と言う文字が表示されます。 「一」や「日」などは問題ありませんでした。 これは2byte文字の変換に失敗している所為と考え、文字コードについて調べました。 PHP側からは全てutf8の文字コードでデータを送信しています。 DB側の文字コードは以下のようになっていました。 >show variables like 'character\_set\_%'; Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server ujis character_set_system utf8 各種サイト様を参考にしたところ、 character_set_server が ujis となっているのが問題のような気がしています。 ですが、本DBは学校で借りているレンタルサーバを使用しているため、 my.cnf等直接ファイルを修正することが出来ません。 なので、以下のサイト様を参考にSQL発行の際には必ず SET character_set_server = utf8; も発行するようにしてみたのですが、上手くいきませんでした。 http://thesnowcolor.blogspot.jp/2010/10/phpmyadmin.html 自ら試したのはここまでです、何かほかに調べたほうがよい、 などありましたら情報のご提供宜しくお願い致します。 【PHP環境】 Apache 2.2.3 PHP 5.1.6 MySQL 5.0.45 (※他、必要情報ありましたらご指摘お願いします)

    • ベストアンサー
    • PHP
  • 機種依存文字

    いつもお世話になっております。 機種依存文字について質問させていただきます。 CSVファイルをアップロードして、文字コードがEUCのデータベースに 格納したいと思っております。(PHPの文字コードもEUCになっております。) 「(はしごたか)」「(たつさき)」などの機種依存文字が 文字化けをしてしまいます。 $name = mb_convert_kana(mb_convert_encoding($data[1], "EUC-JP", "Shift-JIS"), "KV") $name = mb_convert_kana(mb_convert_encoding($data[1], "eucJP-win", "Shift-JIS"), "KV") としても文字化けをしてしまいます。 また、以下の設定をしても文字化けは解消されません。 ini_set('default_charset', 'eucJP-win'); ini_set('mbstring.http_output', 'eucJP-win'); ini_set('mbstring.internal_encoding', 'eucJP-win'); 皆様、ご提示お願いいたします。 よろしくお願いいたします。 <環境> OS:Red Hat Linux PHP:Version 4.3.1 DB:MySQL 3.23.56

    • ベストアンサー
    • PHP
  • mysqlの文字化けの対処

    MAMPにてMYSQLを導入しています。 Mac os x snow leopard10.6.8 php5.3.6 mysql5.5.9 apache2.2.21 文字コードを確認すると最初はlatin1となっているため、ネットで調べ対処してみました。 対処した内容としては、以下になります。 (1)/MAMP/db/mysql/ にリネームしたmy.confを置く。 (2)[mysqld]に、character-set-server=utf8とskip-character-set-client-handshakeを追加。 (3)[mysql]に、default-character-set=utf8を追加。 その後再起動し、文字コードを確認してみたところ、以下の2つがどうしてもlatin1のままです。 character_set_database character_set_server 他にも対処してみたのですが、どうしてもこの2つだけがlatin1のままです。 どういった対処をすれば文字化けを解消できますか? どうが、解消法をご教示戴けないでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • php.iniを変更したのにUFT-8が文字化け

    こんにちは。教えて下さい。 Movable TypeをUTF-8で運営しようと思いましたが、使用中のサーバーのphpの文字コードがEUC-JPでした。 サーバーに問い合わせたところ、php.iniを編集するだけで文字コード変更できます、とのこと。 そこで、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; を mbstring.language = neutral mbstring.encoding_translation = On mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.internal_encoding = UTF-8 mbstring.detect_order = auto mbstring.substitute_character = none; にしてみました。 当方初心者で、php.iniは初めていじりました。 EUC-JPとあった箇所またはJapaneseとあった箇所を変更したのみです。 また、Movable Typeのmt-config.cgiで 文字コードをEUC-JPからUTF-8に変更。 Movable Typeの文字コード関連の変更はこのファイルのみですのでこれで大丈夫・・・。 そう思ったのですが、Movable Typeが文字化け・・・。 php.iniの設定が間違っているのでしょうか? 助けてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • サーバー移転で文字化け

    ロリポップ!からhetemlにサーバー移転したところ、データベースから取り出したデータが文字化けするようになってしまいました。 因みにmysqlのデータは変換なしでエクスポートし、インポートしております。 ã€ã‚¨ãƒ´ã‚¡ã€‘ã½ã‹æ³ 上記のような文字化けです。 キャラクターセット周りが怪しいと思い、色々試してみましたが一向に治る気配がありません・・。 php varは5.3です。 .htaccessに「AddHandler php5.3-script .php」と記述して使っております。 mysql varはMySQL5.0.51aです。 MySQLのキャラクターセットはこんな感じです。 Variable_name Value character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 phpでの接続はこのようにしております。 mb_language('uni'); mb_internal_encoding('utf-8'); mb_http_input('auto'); mb_http_output('utf-8'); $con = mysql_connect('xxx','xxx','xxx') or die(mysql_error()); mysql_set_charset('utf8'); mysql_select_db('xxx') or die(mysql_error()); php.iniの設定は以下のとおりです。 mbstring.detect_order utf-8 mbstring.encoding_translation off mbstring.func_overload 0 mbstring.http_input pass mbstring.http_output pass mbstring.internal_encoding utf-8 mbstring.language neutral 何をやっても治らず、途方に暮れております。 ご助言をよろしくお願いいたします。