xmlrpc.incの不具合
ブログを操作したり、pingの送受信をしたりする際に使用しているxmlrpc( http://phpxmlrpc.sourceforge.net/)で「不都合」と思われる箇所を発見した。
今までいろいろなブログに対してテストをおこなっていた。MTなどでは正常に送信できているのだが、例えば「gooブログ」で投稿すると???と「?」の羅列になってしまっていた。MTで正しく投稿できているのだから、「gooブログのほうがおかしい」と決め込んでいたのだが、実はxmlrpc.incがまずかった。
xmlrpc.inc読み込み時に以下のように記述する必要があることは前にも書いた。
$GLOBALS[‘xmlrpc_internalencoding’]=’UTF-8′;
しかし、これだけでは「準備が足らない」ということだ。具体的にはxmlrpc.incのxmlrpc_clientクラス中で定義されている「request_charset_encoding」という変数に値をセットしてやらなければならない(デフォルトでは空文字列が与えられている)。具体的には以下のように記述。
require_once(‘xmlrpc.inc’);
$GLOBALS[‘xmlrpc_internalencoding’]=’UTF-8′;
$obj=new xmlrpc_client($path,$host,$port);
$obj->request_charset_encoding=’UTF-8′;
xmlrpc.inc内にはクラスの定義だけでなく、簡単な判別ルーチンや独自で使用する関数も定義されている。上記の文字コード設定は、実際にはクラスの外で定義された関数を仲介してクラス内で処理されている。しかし設定箇所がないので、何もしなければ希望の処理パターンを選べないのだ。
本来なら、値をセットするような関数を用意しておくべきなのだが、それも見当たらない。仕方無しに「直接外部から変数の値を書き換えている」という次第だ。
バグなのか、それともxmlrpcを記述する際の正しい書き方が別に存在するのか、理由は不明。でもこれでほとんどのブログに対して記事投稿ができるようになりそうだ。