• ベストアンサー

$_POSTでの文字化け

[開発環境] language : PHP Version 4.3.1 system : Windows NT localhost 5.1 build 2600(xp pro) httpd : AN HTTP Daemon Version 1.42h [本番環境](j-navi) language : PHP Version 4.1.2 system : FreeBSD 4.5-RELEASE httpd : apache_1.3.27 開発環境下で作成したスクリプトを本番環境に持っていくと、POSTされたデータが文字化けを起こします。$_POST[moji]で取得したデータをテキストファイルに吐き出す仕組みなんですが、どうもこの時点で既に文字化けを起こしているようなんです。文字化けを起こしたPOSTデータをテキストに吐くので、その後は文字化けを起こしたデータをそのまま読み出し綺麗にブラウザに表示します。 もちろん開発環境ではまったく問題なくスクリプトは動いています。 随分スクリプト自体は書けるようになってきたんですが、このあたりの設定といいましょうか、ダブルバイトの文字の扱いがよく理解できていません。 それゆえ、何の情報をお伝えすればよいのかも検討つきません。わかっているのは、文字化けをするそれだけなんです。 どうかヒントを下さい。アタリをつけることもできてないので本当に途方にくれています。よろしくお願いします。 Configure Command './configure' '--with-mysql=/usr/local/mysql' '--with-apache=../apache_1.3.27' '--enable-track-vars' '--enable-xslt' '--with-xslt-sablot' '--enable-mbstring' '--enable-mbstr-enc-trans' magic_quotes_gpc on http input encoding translation enabled mbstring.detect_order no value mbstring.http_input no value mbstring.http_output no value mbstring.internal_encoding no value mbstring.substitute_character no value

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

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

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

$_POST[moji] で受け取った時点で文字化けしているのであれば 送信フォーム側の文字コードと 表示側の文字コードが異なっている可能性が高いと思います サーバにアップロードした段階で文字コードが 変わっている、改行コードが変わっていることはありませんか?

123daa
質問者

お礼

ありがとうございます。 これからEUCに全てコンバートかけて処理していきます。ただ、なんとなくうちのレンタル鯖の問題の気もしています。よそ様が作られたスクリプトも同様の動きをしていることが判明しました。 

123daa
質問者

補足

お世話になります。 色々と試してみた結果、結局EUC-JP・SJISの問題でした。 本当にお世話おかけしました。ありがとうございました。

その他の回答 (1)

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

PHPでのマルチバイト文字関係の設定が、開発環境と本番 環境で異なっているためではないでしょうか? これらの設定はPHPのconfigureスクリプトがあるトップ ディレクトリに php.ini-distというファイルはありま せんか?これを自分でコピーして、設定を行います。 マルチバイト関係の設定はせいぜい6個くらいしかありま せんし、以下のURLにSJISの場合とEUCの場合の設定例が 書いてあります。 または手っ取り早く、本番環境からphp.iniをコピーして くればよいのではないでしょうか?

参考URL:
http://de3.php.net/manual/ja/print/ref.mbstring.php
123daa
質問者

お礼

ありがとうございます。 手っ取り早く、コピーしたいのですが、なにせレンタルなもので手が出せません。 バージョン等々の違いが顕著に影響するのは何とかして欲しいです。Perl5の方が楽ですよね。

関連するQ&A

  • postの引渡しで文字化け

    海外の投稿ソフト(掲示板のようなもの)をダウンロードして使ってみました。 マルチバイト対応で、通常の画面(php)には日本語が表示されました。 しかし、文章を書いて、それを確認する画面に移動すると、その書いた文章のみ文字化けしてしまいます。 *テキストエリアに記入した日本語のみ文字化けしてしまいます。 対策として 1、メタタグ <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> 2、accept-charset <form method="post" accept-charset="EUC-JP" action="・・・> 3、.htaccess php_value AddDefaultCharset EUC-JP php_flag output_buffering Off php_value default_charset EUC-JP php_value mbstring.language Japanese php_flag mbstring.encoding_translation On php_value mbstring.http_input EUC-JP php_value mbstring.http_output EUC-JP php_value mbstring.internal_encoding EUC-JP php_flag mbstring.substitute_character none php_value mbstring.detect_order EUC-JP,ASCII,JIS,UTF-8,SJIS とすべて、EUC-JPにそろえましたが、文字化けしてしまいます。 文字化けの種類から察するに、EUC-JPで書いた日本語が、確認画面では、ISO-8859-1に変えられているようです。 何が原因で、どうすればいいのか教えていただけると嬉しいです。 よろしくお願いいたします。 php は4.3.11 Apacheは 1.3.34です。

    • ベストアンサー
    • PHP
  • phpmyadminで文字化け

    こんにちは、 現在、php5,mysql4で構築しているのですが、 phpmyadminでテーブルに入れた日本語を見ると 文字化けを起こしており、 たぶん、default_charsetだと思うのですが、 何を設定すればよいのでしょうか? MYSQL4 UTF-8 PHP5 mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output SJIS mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.script_encoding no value mbstring.substitute_character no value default_charset no value

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

    現在PHPでの開発をおこなっています。 環境はWindows2000、Webサーバー『APACHE』、PHP『php-4.2.0-Win32』を使用しております。 Mysqlも接続でき、Web上でも表示ができるようになったのですが、文字化けを起こしてしまいます。以前カタカナの『ソ』が文字化けを起してしまったので、その時は『php.ini』ファイルの ・output_bufferring = Off ・default_charset = EUC-JP ・mbstring.http_input = auto ・mbstring.http_output = EUC_JP ・mbstring.internal_encoding = EUC_JP ・mbstring.substitute_character = none ・register_globals = On と7箇所設定を変えました。自分で作成したソースもEUCで保存してるんですけど、 文字化けが起こってしまいます。 どうしたらよろしいでしょうか? お分かりになる方がおられましたらよろしくお願い致します。

    • 締切済み
    • PHP
  • サンダーバードで、全角8文字以降が、文字化け。

    いつもお世話になってます。 さて、PHPで、メールフォームを作ったのですが、 クライアントのメールソフトが、サンダーバードで、 件名の全角8文字以降が、文字化けするようです。 (Outlock等では、文字化けしません) 解決策をご存知の方がいましたら、教えて下さい。 また、環境の情報で不足がありましたら、ご連絡ください。 宜しくお願いいたします。 【環境】 サーバ WebARENA SuiteX PHP 文字コード EUC-JP http://www.arena.ne.jp/suitex/index.html 【htaccessに記載内容】 php_value mbstring.encoding_translation On php_value mbstring.internal_encoding EUC-JP php_value mbstring.http_output EUC-JP php_value mbstring.script_encoding EUC-JP

    • ベストアンサー
    • PHP
  • FORMからの文字入力文字化け

    「.htaccess」で設定した場合、正常に動作するのですが、「自作スクリプト内」でPHP環境を設定すると文字化けします。 フリーの掲示板が「.htaccess」で設定した場合、文字化けしますので、自作スクリプトも今回からスクリプト内部からPHP環境を設定し動作確認をしています。 FORMからの文字入力だけが文字化けしてしまうのですが、解決方法が見出せずに困っています。 また、「mbstring.encoding_translation」の設定方法がわからずに設定していないため、入力文字化けするのでしょうか。 表示だけは、文字化けせずに表示されます。FORMからの入力文字だけが文字化けします。 解決方法をご存知の方がいらっしゃいましたらご教授のほど宜しくお願いします。 # .htaccessで設定する場合 php_flag output_buffering "On" php_value output_handler "mb_output_handler" php_value default_charset "Shift_JIS" php_value mbstring.language "Japanese" php_value mbstring.internal_encoding "EUC-JP" php_value mbstring.http_input "auto" php_value mbstring.http_output "SJIS" php_value mbstring.detect_order "auto" php_flag mbstring.substitute_character "none" php_flag mbstring.encoding_translation "On" # 自作スクリプト内で設定する場合 ini_set("output_buffering", "On"); ini_set("output_handler", "mb_output_handler"); ini_set("default_charset", "Shift_JIS"); mb_language("Japanese"); mb_internal_encoding ("EUC-JP"); mb_http_input("auto"); mb_http_output("SJIS"); mb_detect_order("auto"); mb_substitute_character("none"); ob_start("mb_output_handler");

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

    お世話になっております。 文字化けに関して対策方法が分からず困っております。 というのも、当方で作成したスクリプト(EUCで記述し、開発環境のmbstring.http_outputもEUC)があるのですが、このスクリプトを知人が借りているレンタルサーバーにアップさせると、文字化けしてしまう現象が起きています。(他のサーバーにもアップしてテストしているが文字化けは初めて) このスクリプト、全て単体で動かすためのものですが、html部の <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> これくらいしか、文字コードの指定はしていませんが、これだけでは不足なのでしょうか? 以上、些か漠然とした質問ではありますが、今回の文字化けする原因など、考えられる要因など御座いましたらどんな些細なことでも結構です。アドバイスのほど頂戴出来れば幸いです。宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯サイトで稀に文字化けしてしまいます。

    PHP+MySQLで携帯サイトを構築しています。 DBと各ファイルのエンコードはEUC-JPで、携帯対応するために 出力のみhtaccessにてSJISにしております。 また、入力フォーム等もあるためhtaccessに下記を記述したところ、 基本的には問題なく表示するのですが、更新を繰り返すと5~10回に1回ほど文字化けを起こします。 #htaccess内の記述--- php_value output_handler mb_output_handler php_value default_charset Shift_JIS php_value mbstring.language Japanese php_flag mbstring.encoding_translation 0 php_value mbstring.http_input auto php_value mbstring.http_output SJIS php_value mbstring.internal_encoding EUC-JP php_value mbstring.substitute_character none #------------------- それも、現時点で確認している状況では ・db.phpというファイル内でDBからデータを取得し、その中でdumpした場合はまったく文字化けせずSJISで表示 ・index.html内に日本語を記述しても文字化けなくSJISで表示 ・main.php内でいろいろなファイルをrequire_once等していると文字化けが発生 (具体的には日本語部分が全て???になったり空白になったりする ソースを開いてエンコードを変えても変化無し) 毎回正常だったり毎回文字化けしていれば分かるのですが、ごく稀にそういう状況が起きてしまっているので困っています。 どなたか知恵をお貸し下さい。 サーバ環境 レンタルサーバ Kagoya Internet Routing(共用) Apacheバージョン Apache/1.3.37 MySQLバージョン 5.0.33 (Ver 14.12 Distrib 5.0.33) PHPバージョン 5.2.5

    • 締切済み
    • PHP
  • 入力フォームの文字化け

    PHPのショッピングカートを利用させていただいてます 住所を入力後→確認画面を開くと住所欄の一部が文字化けしてしまいます 例えば「能登半島」と入力すると 確認画面では「能\登半島」と出力されるのです 必ず文字を化けを起こすわけではなく 住所によっては文字化けしません 尚、IEではこの症状はなく Firefoxやサファリでこの現象が起きます .htaccessの設定はこんな設定をしています php_value mbstring.language Japanese php_flag mbstring.encoding_translation On php_value mbstring.script_encoding SJIS php_value mbstring.internal_encoding SJIS

    • 締切済み
    • PHP
  • PHP-4.3.1でmake出来ない

    RedHat8.0 apache(httpd-2.0.45)の環境に PHP-4.3.1をインストールしようとしたのですが、 下記のconfigureでmake出来ません。 ./configure --with-apxs=/usr/local/apache2/bin/apxs --enable-mbstring --enable-mbregex --enable-zend-multibyte どなたか分かる方がいらっしゃいましたら 教えてください。 ※ちなみに、オプションを付けずにconfigureを 行うとmakeできます。 ※上記のオプションを付けると、Makefile.fragmentsと Makefile.objectsのみ作成されます。

  • PHPがローカル環境でのみ文字化けする

    PHPをApache2.0上でローカルテストすると、ブラウザ表示がどうにも文字化けしてしまいます。 EUCで組んだスクリプトをmb_convert_encodingでSJISに変換して出力しているのですが、本番用のサーバーではきちんと動作するのに、ローカル環境ではブラウザがEUCと認識してしまっているようで、文字化けが発生します。 99%php.iniかapacheの設定がおかしいのですが、どこがおかしいか見てはいただけないでしょうか。 php.iniのそれっぽい部分 mbstring.encoding_translation = Off mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none; ;mbstring.func_overload = 0 なお、Apacheのhttpd.confにAddDefaultCharset項目はありませんでした。 特殊要因としてApacheがXAMPPの中で制御されていることなのですが、php.iniはApacheのbinディレクトリ内のものを編集しています。 以上です。 どうかよろしくお願いします。 WinXP SP3 PHP 5.28 Apache 2.0 XAMPP 1.7.0 ※ApacheとXAMPPはPleiadesにてEclipseを導入したときについてきたもの。

    • ベストアンサー
    • PHP