XML_Unserializerについて

PHP5になったのでPEARのXML_Unserializerを使用しなくてもAPIに対応できそうですが、今までPHP4の時に使用していたので修正する時間もないので継続して使用しています。

ところであるAPIが文字コードshift_jisで出力されているようでXML_Unserializerで文字化けとなりました。

そこで以前、経験したようにXML_Unserializerのオプションを使用してコードをUTF-8に変換するとUTF-8でAPIを配列に出力してくれます。
require_once "XML/Unserializer.php";
$xml_data = file_get_contents(’リクエストURL’);
$parser = new XML_Unserializer(array('parseAttributes' => true,'targetEncoding' => 'UTF-8'));
$parser->unserialize($xml_data);
$XML = $parser->getUnserializedData();

これで後は配列$XMLから取り出した変数をHTMLに書き出せばいいのです。
対象のHTMLはshift_jisなので配列$XMLの出力をUTF-8からshift_jisに変更しなくてはいけません。

mb_convert_encodingはひとつの文字列ごとの変換でのでコードが煩雑になるなと思って配列$XMLを一括してshift_jisに変更する方法はないかと探したら

mb_convert_variables
がありました。PHP関数リファレンスによると
「エンコーディング from_encoding の変数 vars をエンコーディング to_encoding に変換します。 」
「vars(3番目以降の引数)は、変換する変数への リファレンスです。文字列、配列、オブジェクトを指定することが可能です。 mb_convert_variables() は全てのパラメータが 同じエンコーディングを有することを仮定します。 」
ということで

mb_convert_variables("Shift_Jis", "UTF-8", $XML);

とすることで配列$XMLが一括でShift-Jisに変換。


サーバー移動完了

サーバーをPHP5対応に移動しました。
しかし、サイトのすべてにチェックがいき届いていません。

PEARのインストールからPHP5.1から5.2へのアップグレードまでサーバー自体の設定を試行錯誤しながらやってきましたのでそちらに手がかかりすぎたようです。

これから時間をみつけては手直しを行って行きたいとおもいます。

yomiサーチも設置変更しましたが、設定で管理者の許可で登録するはずが、すぐに登録できるようになっていました。現在は設定を直しましたが、9月初旬の登録のうち、申し訳ありませんがサイトの趣旨に合わないので岡山に関係のないものは削除させていただきます。