プロが教えるわが家の防犯対策術!

POSTメソッドについて質問させていただきます。
WEBページはPHPで記述しています。
よろしくお願いします。

$name='田中一郎';
$req->addPostData("username", $name);

上記のようにPOSTでデータを送信すると
受け取った側のページで文字化けしてしまいます。

$nameの内容をEUC-JPで送信したいのですが、
個別に文字コードを指定することは可能でしょうか。

環境は、PHP 5.2.17です。
確認に使用しているブラウザはGoogle Chromeがメインでサブはfirefoxです。


よろしくお願いします。

A 回答 (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;
?>
    • good
    • 0
この回答へのお礼

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

>URLエンコードする前の 文字化けしてるもので mb_detect_encoding して欲しかったのです。

失礼しました。これは、UTF-8になっていました。


上記手順に沿って、urlencodeした後にurldecodeしてからmb_convert_encodingすると正常に"田中一郎"で表示されました。


ちなみにですが、urlencode→urldecodeの流れの前にmb_convert_encodingしても"?遺賢筝??"と文字化けしたままで、urlencode→urldecodeの流れの後にmb_convert_encodingするとうまくいきました。


どうもありがとうございました!!
本当に助かります!

お礼日時:2011/12/04 01:08

>urlencode($name);



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

この回答への補足

あと、formのaccept-charsetは

accept-charset="UTF-8,EUC-JP,shift_jis"

にしています。
UTF-8を外すと処理がうまくいかないようになっています。

補足日時:2011/12/03 02:53
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
初心者すぎてすみません・・・

$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

と文字化けしてしまいます。

お礼日時:2011/12/03 02:45

一応、文字化けしてるほうの文字列を mb_detect_encoding に かけると なんて出ます?



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

この回答への補足

あと、formのaccept-charsetは

accept-charset="UTF-8,EUC-JP,shift_jis"

にしています。
UTF-8を外すと処理がうまくいかないようになっています。

補足日時:2011/12/03 02:53
    • good
    • 0
この回答へのお礼

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

>一応、文字化けしてるほうの文字列を 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しない場合は、????になります。

お礼日時:2011/12/03 02:50

とりあえずurlencodeする必要があるのでは?


文字コードの変換はurlencodeする前にmb_convert_encodingしてくださいね

参考URL:http://www.php.net/manual/ja/function.urlencode. …

この回答への補足



$name='田中一郎';
$name=mb_convert_encoding($name,"euc-jp", "utf-8");
urlencode($name);
$req->addPostData("username", $name);

こんな感じになってます。

補足日時:2011/12/02 20:14
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/12/02 19:03

スクリプトの文字エンコードは何でしょうか?



スクリプトでの記述がutf-8のときにeuc-jpでPOSTしたいのであれば

$name = mb_convert_encoding('田中一郎';, 'euc-jp', 'utf-8');

などとしておけばいいのではありませんか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
まさにスクリプトの記述はUTF-8になります。

上記のようにmb_convert_encodingで指定してみましたが、
文字化けはなおりませんでした。

お礼日時:2011/12/02 19:02

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