pear/XML_PRC-1.50 で勝手に mb_convert_encoding

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" ってどれのことよ!!