header("location〜")をPOSTで渡す方法を探しています。
携帯サイトなのでJavascriptは使えません。
shift-jisのサイトからutf-8のサイトへ渡します。
(1)307でリダイレクト
header('Location: '.$url, true, 307);
=>POSTの文字コードを変換できないのでダメでした。
(2)POSTで送信してからリダイレクト
http://questionbox.jp.msn.com/qa3554188.html?StatusCheck=ON
=>うまくいきません。やり方が悪いのかもしれません…。
送り元のサイトの文字コードをutf-8にしてしまえば解決するのですが、携帯サイトなのでshift-jisにするしかありません。
(最近ではほとんどの機種がutf-8対応になっていますが、社長の機種が対応していなくて…)
よろしくお願いします。
POST送信先のサイトが修正可能でマルチバイトに対応しているのであれば、
mb_convert_encoding()で$_POSTの値を変更するだけでしょうけど、
おそらくそれが出来ないからお困りなんですよね?
送信元フォームで文字コードを指定する方法は、以下のサイトが分かりやすいと思います。
http://wiki.mesolabo.com/?%E3%83%A1%E3%82%BD%E7%9F%A5%E6%81%B5%2...
(POST で)受け取ったデータを、エンコードを変換して、別ホストへ投げるのなら、
fsockopen(), fwrite() を使って
書き出せばよいうのでは?
(もちろんその前に、mb_convert_encording() で変換しておく)
POST で送るのなら、このサンプル
http://www.ecoop.net/memo/2005-12-29-1.html
と同じような手順で書き出せばよいのでは?
プロトコルの詳細は、HTTP プロトコル POST でググるといろいろ見つかると思います。
回答ありがとうございます。
質問の仕方が悪くてすみません。
POSTデータを送るだけではダメなんです。
クライアントが送り先に行かないと(リダイレクトしないと)ダメなんです。
POST送信先のサイトが修正可能でマルチバイトに対応しているのであれば、
mb_convert_encoding()で$_POSTの値を変更するだけでしょうけど、
おそらくそれが出来ないからお困りなんですよね?
送信元フォームで文字コードを指定する方法は、以下のサイトが分かりやすいと思います。
http://wiki.mesolabo.com/?%E3%83%A1%E3%82%BD%E7%9F%A5%E6%81%B5%2...
> POST送信先のサイトが修正可能でマルチバイトに対応しているのであれば、
> mb_convert_encoding()で$_POSTの値を変更するだけでしょうけど、
> おそらくそれが出来ないからお困りなんですよね?
まさしくその通りです!
> 送信元フォームで文字コードを指定する方法は、以下のサイトが分かりやすいと思います。
すばらしい!
探していたのはまさにこのようなことです。
accept-charset="utf-8" というやり方は知っていましたが、IEでダメだったのであきらめていました。解決方法があったのですね!
PHPにとらわれすぎて問題の根本を見失っていたのかもしれません。
ありがとうございます。
しかし、この方法で携帯で試してみたのですが、
docomo => OK, AU => OK, softbank => NG
でした。残念。
◆追記です。
softbankだけNGの理由が分かりました。
softbankの携帯が文字コードを変換できる携帯だったので
試しに「自動」から「shift-jis」や「utf-8」に変更してみたところ
なんと送信先のページがshift-jisになっていました。
(shift-jisに切り替えたら送信データが文字化けして、ページは正常。
utf-8に切り替えたら送信データは正常、ページが文字化け。)
つまり、教えていただいた方法でちゃんとUTF-8で送られていたということです。
▽
ただいま、相手先にshift-jisになる場合の判別方法の回答待ちです。
それに合わせて送る側も対応すれば解決します。
> POST送信先のサイトが修正可能でマルチバイトに対応しているのであれば、
> mb_convert_encoding()で$_POSTの値を変更するだけでしょうけど、
> おそらくそれが出来ないからお困りなんですよね?
まさしくその通りです!
> 送信元フォームで文字コードを指定する方法は、以下のサイトが分かりやすいと思います。
すばらしい!
探していたのはまさにこのようなことです。
accept-charset="utf-8" というやり方は知っていましたが、IEでダメだったのであきらめていました。解決方法があったのですね!
PHPにとらわれすぎて問題の根本を見失っていたのかもしれません。
ありがとうございます。
しかし、この方法で携帯で試してみたのですが、
docomo => OK, AU => OK, softbank => NG
でした。残念。
◆追記です。
softbankだけNGの理由が分かりました。
softbankの携帯が文字コードを変換できる携帯だったので
試しに「自動」から「shift-jis」や「utf-8」に変更してみたところ
なんと送信先のページがshift-jisになっていました。
(shift-jisに切り替えたら送信データが文字化けして、ページは正常。
utf-8に切り替えたら送信データは正常、ページが文字化け。)
つまり、教えていただいた方法でちゃんとUTF-8で送られていたということです。
▽
ただいま、相手先にshift-jisになる場合の判別方法の回答待ちです。
それに合わせて送る側も対応すれば解決します。