• ベストアンサー

postの文字化け防止について

POSTメソッドについて質問させていただきます。 WEBページはPHPで記述しています。 よろしくお願いします。 $name='田中一郎'; $req->addPostData("username", $name); 上記のようにPOSTでデータを送信すると 受け取った側のページで文字化けしてしまいます。 $nameの内容をEUC-JPで送信したいのですが、 個別に文字コードを指定することは可能でしょうか。 環境は、PHP 5.2.17です。 確認に使用しているブラウザはGoogle Chromeがメインでサブはfirefoxです。 よろしくお願いします。

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.5

まず、一つ間違いをつっこませていただきますが、↓は文字化けではなく、URLエンコードされた 正しい文字列です。 %C5%C4%C3%E6%B0%EC%CF%BA んで、↑これを、mb_detect_encoding しても意味なかったです。 これでやっちゃうと ASCII になるんでしょうね。 URLエンコードする前の 文字化けしてるもので mb_detect_encoding して欲しかったのです。 んで、さらに よく分んないまま テキトーに書いてたら ↓の $str03 で 正しい文字列「田中一郎」に戻りました。 正直、どうして そうなったのかよく分りません。 眠くて 頭回ってません。。。zzZZZ このスクリプトの文字コードは UTF-8です。 <?php $str = "%C5%C4%C3%E6%B0%EC%CF%BA"; $str02 = urldecode($str); print mb_detect_encoding($str02) . "<hr>"; print $str02 . "<hr>"; $str03 = mb_convert_encoding($str02 , "SJIS" , "EUC-JP"); print $str03; ?>

midorinodonchan
質問者

お礼

回答ありがとうございます。 >URLエンコードする前の 文字化けしてるもので mb_detect_encoding して欲しかったのです。 失礼しました。これは、UTF-8になっていました。 上記手順に沿って、urlencodeした後にurldecodeしてからmb_convert_encodingすると正常に"田中一郎"で表示されました。 ちなみにですが、urlencode→urldecodeの流れの前にmb_convert_encodingしても"?遺賢筝??"と文字化けしたままで、urlencode→urldecodeの流れの後にmb_convert_encodingするとうまくいきました。 どうもありがとうございました!! 本当に助かります!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

>urlencode($name); $name=urlencode($name); じゃない?

midorinodonchan
質問者

お礼

回答ありがとうございます。 初心者すぎてすみません・・・ $name=urlencode($name); に変更してみましたが、やはり文字化けしてしまいます。 現在は、 $name=mb_convert_encoding("田中一郎","euc-jp","UTF-8"); $name=urlencode($name); $req->addPostData("item_name", $name); このようにしていますが、 %C5%C4%C3%E6%B0%EC%CF%BA と文字化けしてしまいます。

midorinodonchan
質問者

補足

あと、formのaccept-charsetは accept-charset="UTF-8,EUC-JP,shift_jis" にしています。 UTF-8を外すと処理がうまくいかないようになっています。

全文を見る
すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

一応、文字化けしてるほうの文字列を mb_detect_encoding に かけると なんて出ます? ついでに、なんて文字列を投げて、どんな風に文字化けしてるか 書いてもらえると 解決しやすいかもしれません。

midorinodonchan
質問者

お礼

回答ありがとうございます。 >一応、文字化けしてるほうの文字列を mb_detect_encoding に かけると なんて出ます? ASCIIって出ました。 ソースは以下のようにしています。 $name=mb_convert_encoding("田中一郎","euc-jp","UTF-8"); $name=urlencode($name); $req->addPostData("item_name", $name); このようにしていますが、 %C5%C4%C3%E6%B0%EC%CF%BA と文字化けしてしまいます。 ちなみにurlencodeしない場合は、????になります。

midorinodonchan
質問者

補足

あと、formのaccept-charsetは accept-charset="UTF-8,EUC-JP,shift_jis" にしています。 UTF-8を外すと処理がうまくいかないようになっています。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

とりあえずurlencodeする必要があるのでは? 文字コードの変換はurlencodeする前にmb_convert_encodingしてくださいね

参考URL:
http://www.php.net/manual/ja/function.urlencode.php
midorinodonchan
質問者

お礼

回答ありがとうございます。 ご指摘の通り、mb_convert_encoding⇒urlencodeとしてから POSTしましたが、やはり文字化けしたままでした・・・

midorinodonchan
質問者

補足

今 $name='田中一郎'; $name=mb_convert_encoding($name,"euc-jp", "utf-8"); urlencode($name); $req->addPostData("username", $name); こんな感じになってます。

全文を見る
すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

スクリプトの文字エンコードは何でしょうか? スクリプトでの記述がutf-8のときにeuc-jpでPOSTしたいのであれば $name = mb_convert_encoding('田中一郎';, 'euc-jp', 'utf-8'); などとしておけばいいのではありませんか?

midorinodonchan
質問者

お礼

回答ありがとうございます。 まさにスクリプトの記述はUTF-8になります。 上記のようにmb_convert_encodingで指定してみましたが、 文字化けはなおりませんでした。

全文を見る
すると、全ての回答が全文表示されます。

関連する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
  • 文字化けの防止法

    ネット上のサイトから、特定の情報を取り出し、その情報のファイルを作成し、保存するというプログラムを作っています。 取得するサイトの文字コードは、 <meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp"> と指定されていました。 IEでこのページを開くと、エンコードは自動選択で「EUC」になっていました。 さて、php_editor の文字コードを「UTF-8」に指定し、プログラムを作成しているのですが、 全角文字の含まれた文字列を取得し、表示させようとすると、文字化けしてしまいます。 (このときの表示画面は、http://localhost/~です) 設定を変更していると、IE(http://localhost/~)の表示の文字化けも進み、そのときのIEの エンコードを確認すると、中国語系や西ヨーロッパ系のものになっていることがありました。 文字化けさせない手順や、設定はどのように行えばいいのでしょうか?

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

    EUCで作成したwebページがGoogle Chromeで開くと文字化けします。 先頭で文字コードをEUCに指定しているのですが、それでもShift-JISで開かれてしまいます。 他のブラウザでは正常に表示されています。 head内に<!-- 龠 -->を入れると直るというのも見つけましたが、 やってみても直りませんでした。 文字化けを直すにはどうしたら良いでしょうか?

    • ベストアンサー
    • HTML
  • 文字化けの件ですが

    Google chromeであるサイトが文字化けしたので原因を調べ、エンコードを 日本語(EUC-JP)にしたら直りました。 しかし元のShift-JISに戻さなかった場合、 shiftーJISで見れていたページが文字化けすることはありうるのでしょうか

  • htmlが文字化け

    掲題の件について質問させて頂きます。 linuxサーバ(CentOs5)を立ち上げて、apacheをインストールし、DocRootにhtmlファイルをFFFTPにてアップロードした所、文字化けが発生してしまいました。(画面が真っ白になります) 【環境】 Server: Apache/2.2.6 (Unix) mod_ssl/2.2.6 or_log PHP/5.1.6 【アップロードしたファイル内容】 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>ここにタイトルを挿入</title> </head> <body> <form method="post" action="input_check.php" name="input_check"> <input type"text" name="name">お名前: <input type"text" name="furigana">ふりがな: <input type="submit" name="send" value="submit"> </form> </body> </html> ファイルはEUC-JPにて記述しています。 以下試した点をあげてみます。 1. charsetをShift_JISに変更。 ⇒ファイルがEUC_JPで書かれているので当然文字化け。ですが文字化けされた文字は表示されました。(画面が真っ白ではないです。) 2. apacheのhttpd.confのAddDefaultCharsetをコメントアウト ⇒(というよりデフォルトで設定されていませんでした。) 他に何か怪しまれる点はありますでしょうか? 以上宜しくお願い致します。

  • MYSQLをPHPから呼び出したときに文字化けします。

    現在、HTMLでPOST形式でMYSQLにデータを送って、 別のページでそれをPHPで呼び出して HTMLで表にして参照するというページをつくっているのですが、 その中の一部が文字化けしてしまいます。 たとえば「未登録」は「未那俐/td>」などです。 入力した文字の中には文字化けしていないものもあるのですが・・・ これはどういう原因なのでしょうか・・・ ちなみに文字コードはEUCで統一、テキストエディタでの改行コードはCR+LFで設定しています。 教えてください!お願いします!

    • ベストアンサー
    • MySQL
  • 【PHP】文字をPOSTで飛ばすと「'」「"」「\」に「\」がつく

    <form>で文字列を送信して「$_POST」で受信する場合、 「'」「"」「\」の前にのみ自動で「\」がついてしまいます。 (「'」「"」「\」→「\'」「\"」「\\」) これはなぜでしょうか? できれば\を付けないようにしたいのですが… お詳しい方、よろしくお願いいたします。 <環境> EUC-JP PHP4.4.4 <プログラム> <?php header('Content-Type: text/html; charset=EUC-JP'); header('Content-Language: ja'); mb_internal_encoding("EUC-JP"); $step = $_GET["step"]; $tx = $_POST["tx"]; if($step==''){ // ---- 初期画面 print "<form action='hoge.php?step=end' method='POST'>"; print " <input type='text' name='tx'>"; print " <input type='submit' value='ENTER'>"; print "</form>\n"; } if($step=='end'){ // ---- 受信画面 print "{$tx}"; } ?>

    • ベストアンサー
    • 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
  • $POSTの送信

    POSTデータを送信する方法を教えてください。 PHPのPOSTを用いたプログラミングを行っています。 以下のように、前ページ受信したPOSTの内容(「aaa」)を hiddenで送信したいと思いましたが 次ページ(result.php)にて「$name」と受信してしまいます。 (前略) <?php $name = $_POST['name']; echo $name; ?> <form action="result.php" method="POST"> <input type="hidden" name="name2" value=$name> <input type="radio" name="name3" value=" (以下略) 説明下手ではありますがご回答頂きたいと思います。 宜しくお願いします。

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

    DBからデータを持ってきてPHPで表示させると文字化けしてしまいます。 PHPはEUC-JPです。 mb_convert_encoding($message, "EUC-JP")としてみても文字化けしてしまいます。 どなたか対処方法教えていただけたら嬉しいです。

    • 締切済み
    • PHP