こんにちは、なかわけです。
今日はPHPの話。また仕事中にした作業のメモです。
AページからBページ(別サイト)にPOSTしたいのだけど、
- Aページの文字コードはUTF-8で、BページにはShift-JISでPOSTしなければいけない。
- またAページの文字コードをUTF-8からShift-JISに変更することができない。
- さらにBページのウィンドウをJavascriptで開かないといけないという環境でした。
エンジニアに相談したらcURLを使ったら?とアドバイスをもらったんだけど、cURLはPOST先のhtmlを取得することはできるんだけど、ページ自体を遷移(移動)することができなかったので、ボツでした。
考えた挙句、1ページはさんでそのページではJavascriptで自動的にFormをBページへPOSTするようにしました。つまり、
Aページ → A’ページ →Bページ
という流れです。A’ページの文字コードはShift-JISです。
具体的にはこんな感じでした。本当はもっと複雑な処理してますが、わかりやすく簡単にまとめます。
Aページ(UTF-8)
<form action="A'ページ" method="post" target="aDashPage">
<input type="input" name="chocolate" value="ビターが好き" />
<input type="submit" value="A'ページへ" onclick="window.open('', 'aDashPage')" />
</form>
送信ボタンのJavascriptではウィンドウ名を「aDashPage」とurlを指定しないで空白のページを開きます。そして、そのウィンドウに対してFormをPOSTするようにします。
A’ページ(Shift-JIS)
<script type="text/javascript">
window.onload = function(){
document.postForm.submit();
}
</script>
<form action="Bページ" method="POST" name="postForm">
<input type="hidden" name="chocolate" value="<?=mb_convert_encoding($_POST['chocolate'], 'SJIS', 'UTF-8')?>" />
</form>
A’ページではメンドクサイですけど、もう一度フォームを作っていますが、type=”hidden”にして表示しないようにしています。また、window.onloadでページの読み込みが完了したらFormをPOSTするようになっていますので、環境によりますが1秒くらいでBページに自動POSTされBページが表示されます。
PHPの言語仕様としてPOSTしてリダイレクトすることはできないようですね。なんかいろいろ問題あるみたい。調べてた記事がどこいったかわからなくなっちゃった・・・。