PHPでPOST送信
…は完成したんだが、ヘッダーの設定が甘いのか文字コードでふにゃふにゃしている
以下、問題のコード
POSTセットPHP
<?php post_void=http_build_query($post_void); //header $header= array(" Content-Type: application/x-www-form-urlencoded; charset=utf-8", "Content-Length: ".strlen($post_void) ); $context= array( "http"=> array( "method"=>"POST", "header"=>implode("\r\n",$header), "content"=>$post_void ) ); $url="http://localhost/bbs_00/system/insert/new_topic_ex.php"; echo file_get_contents($url, false, stream_context_create($context)); ?>
$post_voidにはPOST送信したい内容が、連想配列で格納されてます
で、だ
こいつを受け取ると、文字化けするんだ
POSTの中身は問題なくUTF-8さん。しかし、だ。この後の処理が問題
bbs_00/system/insert/new_topic_ex.phpの中身
<?php foreach($_POST as $x) { $x=mb_convert_encoding($x,"UTF-8","Shift-JIS"); echo$x."<br>"; } ?>
さて、何でエンコードしてるのかって?こちらのファイルの文字コードもUTF-8にすればいいじゃないかって?
もうしてるんですorz
現状では、受け取ったpostデータを一々エンコードして誤魔化している(余談だが、調べてみた限りではapplication/x-www-form-urlencodedは明示しない場合、ASCIIでデータを解釈するらしい)
ページ内のコードがutf-8なのに対して、プロパティで認識されているのはShift-JIS
で、ここからがややこしいのだがこのnew_topic_ex.phpというのは更にクラスタ上位に存在するphpファイルが呼び出して行なう処理ファイルなんだ
この上位処理は文字化けが起こっていない。つか、こちらもUTF-8で書いてメタタグでも指定しているのにShift-JISで処理される
もう訳がわからない…
教えてマゾい人(脂汗
追記(同日23:19)
前文改定
本文ミスしてたorz
更に追記(6/9)
データを二名に渡して、それぞれの独自環境(localhost)で実行してもらった
一名が、同じ状態が発生してもう一名は意図したエンコードになったそうだ
…鯖の設定の問題らしい
EUC-JPなら兎も角として(うちのlocalhostは基本的にデフェクトスタンダードなEUC-JP環境にしてる。その上でUTF-8で動作させるよう頑張ってる。無駄な努力)Shift-JISで解釈されるってどういうことなのですかい
謎が更に謎に。とりあえず設定ファイルにShift-JISのSの字も存在しないこの不思議
追記(6/12)
やはり鯖の設定だった
http_outputの設定がSJISと制定されていた
あーShift-JISってこういう表記もあったっけorz
どうせならここの設定も動的な感じにしたいけどどうすればいいのかな…auto制定したら、なんか文字化ける
うーむ