[PHP-users 16239]Re: EUC⇒Shift-JISでのPOST送信での文字化け解決法ありませんか?

Shin MATAMURA matamura @ m-flats.co.jp
2003年 6月 25日 (水) 15:14:43 JST


マタ@MFと申します。

SHoe-G Ueyama さんは書きました:
>問題と現状をまとめると以下のようになります。
>
>test.php は文字コード: EUC  表示されている文字コード 
>    ↓ POST
>test2.php は文字コード: Shift-JIS  (test.phpからのPOST送信直後はEUCで
>表示をしてしまいます)
>    ↓ POST
>外の決済システムのサーバー(文字コードはShift-JISのみを受け付ける:文字コー
>ド Shift-JIS)
>        (Shift-JISで書かれたtest2.phpが EUCの文字化けの状態でPOST送信され
>ると
>        データを正常に受け取ってくれないのです)
>
>・ 解決法 test2.php がtest.phpからそのままPOSTによってデータを受け取り表
>示されるときにブラウザでShift-JISで表示をしてくれれば解決です。   しかし
>HTML Headerの中に文字コード Shift-JISの指定をしても EUCファイルからPOST送
>信されるので、EUCで表示してしまうのです。
>
>・ その他の解決法: test2.phpをEUCで記述し、 外の決済システムのサーバーに
>Shift-JISでデータをPOST送信できればいいのですが、このようなことはできるんで
>しょうか?

これを拝見する限りでは、

・ブラウザがSJISコードを認識してくれない(EUCとご認識する)ので文字化けする
・文字化けしたまんまでPOSTする(HTML内のFORMで送信?)と相手が受け付けない
・ブラウザのエンコードをSJISに手動で変更後POSTすると相手は受け付ける

と理解出来るのですが、そうですか?
もし上記の通りなら、Content-typeヘッダをMETAタグで更新するのではなく、
PHPスクリプト内でheader関数を用いて更新してみてはどうでしょうか?
header関数 -> http://www.php.net/manual/ja/function.header.php

<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
でcontent-typeヘッダを書き換える記述法は確実ではなく、特にHTTP1.1ではMETAタグではなく、
レスポンスヘッダで出力する事が強く推奨されていたと記憶してます。
# RFC2068を細かく読んだわけではありませんが…
スクリプトtest2.phpの先頭に、
header('Content-type: text/html;charset=Shift_JIS');
とか入れてみて下さい。
# 必ず何かを出力する処理の前に入れて下さいね

問題点が違っていたらごめんなさい。
こう書いておいて何ですが、私もsocket使ったほうが無難かと思います。

それでは、失礼します。


PHP-users メーリングリストの案内