つっこみ

つっこみ欄にコメントを記載して[つっこむ]ボタンを押してください。
お名前欄の記載は省略できます。

お名前 :
←ここのテキストボックスはスパム対策用なので何も入力しないでください
つっこみ :

[キャンセル]


つっこみ先の記事

・ SimpleXML

最近朝起きて Podcast を同期しても深夜アニメが転送されません。シリーズ予約していたタイトルも続々と最終回を迎えた結果 ほとんど録画されないようになったのねー。と思っていたのですが、よく調べたら

自動エンコードスクリプトがエラーで止まってました

いやはや(笑)。で原因は、自宅サーバ復活の前に思い切って PHP4 から PHP5 に上げた弊害。というか、PHP4でXML読み込みに使っていた XML 関連の関数がPHP5では互換性の無い別のものに変わっていたので関数が見つからないとか言って機能してませんでした。

ということで、よく考えたら PHP5 にしたのは PHP5でないと使えない SimpleXML というのを使ってみたかったからという理由もあるので、練習に書き換えてみました。

PHP4の場合(DOM XML)

$dom = domxml_open_file("$path/$gno");
$root = $dom->document_element();
foreach ($root->child_nodes() as $foo) {
    switch ($foo->tagname) {
     case "Contents":
        foreach ($foo->child_nodes() as $bar) {
            if ($bar->tagname == "title") $title=mb_convert_encoding($bar->get_content(),"EUC-JP","UTF-8");
            if ($bar->tagname == "supplement") $desc=mb_convert_encoding($bar->get_content(),"EUC-JP","UTF-8");
        }
        break;
     case "Program":
        foreach ($foo->child_nodes() as $bar) {
            switch ($bar->tagname) {
             case "start_date":
                $date=$bar->get_content();
                break;
             case "start_time":
                $time=$bar->get_content();
                break;
            }
        }
        break;
    }
}
PHP5の場合(SimpleXML)
$s = preg_replace('/encoding="Shift_JIS"/','',`nkf -Sw8 '$path/$gno'`);
$xml = simplexml_load_string($s);

$title = mb_convert_encoding($xml->Contents->title,"EUC-JP",'utf-8');
$desc = mb_convert_encoding($xml->Contents->supplement,"EUC-JP",'utf-8');
$date = $xml->Program->start_date;
$time = $xml->Program->start_time;

あわあわ、ホントにシンプルですな。入力に関しては事実上 UTF8 しか受け付けない上に encoding= に UTF8以外が入ってると誤動作するのが曲者ですが、はじめにおまじないをしてあげれば後はらくちんです。

こんなに簡単だったら自動エンコードスクリプトを書く前にPHP5にすれば良かったですね(笑)。


■この記事への permanent link URL(下にいくほどファイルサイズが大きくなります)
  http://toriyu.jp/hitorigoto/id2305.html
  http://toriyu.jp/hitorigoto/2008-10-17.html (1日分)
  http://toriyu.jp/hitorigoto/2008-10.html#id2305 (1ヶ月分)