XML_RPC関連をちょっといじっている間に、どうもうまく動かなくなって、最近すごい悩んでました。
いじっているせいで動かなくなったんだと思って、うーんうーんと考えていたんですが、すこしずつつぶしていった結果、どうも pear/XML_RPC のアップデートに由来していたみたい。
RPC クライアントが euc-jp な Ethna で作っていたので、あらかじめ string で渡す文字を
$str = mb_convert_encoding($str, 'UTF-8', 'EUC-JP');
していたんですよ。
ところが XML_RPC-1.50 (stable) では、 http://cvs.php.net/viewvc.cgi/pear/XML_RPC/RPC.php?annotate=1.99 の 1291 行目にあるように
$this->payload = mb_convert_encoding($this->payload, $this->send_encoding);
とやってくれています。
ちなみにデフォルトの $this->send_encoding は UTF-8 です。 mb_convert_encoding() の第 3 引数があたえられていないので、文字列を mb_internal_encoding() で設定されている符号方式(文字コード)から UTF-8 に変更してくれます。
つーことはさ、ようするに「おめーらは mb_internal_encoding() にすることだけ考えとけコラ!」ってことですよね。けどさー、みんながそうしてくれるんならいいけど、そうじゃない人もいるわけで、そうすると internal encoding じゃない文字列を使うこともあるんだよねー。正直、余計なお世話な気がします。せめてオプションで選べるようにしろよ。
つーか PEAR のインストーラで upgrade したら Changelog なんか見る機会ないし! さらに言うと http://pear.php.net/package/XML_RPC/download/ に書いてある
The primary change from 1.4.8 is improved multi-byte support. See the change log for complete information.
の "the change log" ってどれのことよ!!