• 締切済み

PHP cURLでPOSTした値が文字化けしてしまいます。

PHPのcURL関数を使って、POSTしているのですが、POSTの値をUTF-8からSJIS-winに変換して送信したところ、受け側で文字化けしてしまいます。 ※ちなみに、ソースはUTF-8です。 ソース的には、ざっくり以下のような感じです。 $params = 'name=' . $name; $params .= '&kana=' . mb_convert_kana($kana, 'k'); $params = mb_convert_encoding($params, 'SJIS-win', 'UTF-8'); ・・・ $urlConnect = curl_init(); ・・・ curl_setopt($urlConnect, CURLOPT_POSTFIELDS, $params); $res = curl_exec($urlConnect); 受け側を見ると、 mb_detect_encoding($_POST['name']) が、「UTF-8」となっていました。 解決するポイントでも構いませんので、ご指導お願い致します。

みんなの回答

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

mbstring.encoding_translation が On になっていませんか? mbstring.http_input, mbstring.http_output 辺りも確認してみてください。 cf.) http://jp.php.net/manual/ja/mbstring.configuration.php 今回とはあまり関係ないかもしれませんが、urlencode も通しておくことをお勧めします。 半角かなについては承知の上で使っているなら、問題ないと思います。

sunt1972
質問者

お礼

ご回答ありがとうございます。 まさに、mbstring.encoding_translation が On になっていました。 こちらを Off にすることで文字化けが解消しました。 どうもありがとうございました! 昨日ご回答頂きました方もどうもありがとうございました!

すると、全ての回答が全文表示されます。
  • localica
  • ベストアンサー率52% (202/385)
回答No.1

ざっくり調べたところ、UTF-8のBOMが悪さをしているようです。 対応としては、BOMを取り除くファンクションを作る、BOMの付加されないエディタを利用するといった方法がググれました。

sunt1972
質問者

お礼

早速回答ありがとうございます! BOMを除くファンクションを作って試してみましたが、下記のやり方では状況は変わりませんでした。 BOMを調べると、「UTF-8形式のファイルを読み込んだ場合、ファイルの先頭データがBOMというのになっている場合がある。」と書いてあり、 今回のケースでは、どのタイミングで対応すれば良いのかがわかりませんでした。 かなり勘違いしているかもしれませんが、どのタイミングで対応すべきかご教授いただけると助かります。 // BOM除去ファンクション function delete_bom($str) { if (ord($str{0}) == 0xef && ord($str{1}) == 0xbb && ord($str{2}) == 0xbf) { $str = substr($str, 3); } return $str; } //先程のソースに、BOM除去ファンクションを呼び出す $params = mb_convert_encoding($this->delete_bom($params), 'SJIS-win', 'UTF-8'); 何度もすみませんが、宜しくお願い致します。

すると、全ての回答が全文表示されます。

関連するQ&A