php で書いたトラックバック受信用のプログラムが、ping リクエストの内容を文字化けして吐き出すようになった。別サーバではバッチリ動いているのに、なぜ。
$charset = $_POST['charset']; if (empty($charset)) { $charset = "utf-8"; } $excerpt = mb_convert_encoding($_POST['excerpt'], "euc-jp", $charset);
リクエストに charset の指定が無い場合は、デフォルトで「utf-8」を使用することにしていたのだけれど、どうもこれがいけないらしい。この処理を省いたら、文字化けしなくなった。
それでも別サーバでは正常稼動していたのだ。どうも釈然としないなあ。
情報筋からのヒントで php.ini を調べたら、原因が判明した。犯人は、mbstring.http_input の設定内容。以下みたいな設定になってましたよ。あー。
mbstring.http_input = auto
auto の設定によってすでにエンコード済みの文字列を、改めて utf-8 として解釈し、euc-jp に変換しようとしていた。そりゃあ、文字化けもしますわ。auto はあまり信頼できないので、この設定をコメントアウトして、本当に解決!
お疲れさまでした。
このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/362