sticker20 ステッカー ニーマル

2006年10月11日

domなphp

prototype.js script.aculo.us 何かを使っていると、getElementsByTagName() なんかをphpで使えたらHTML解析とか簡単だなぁーって思っていました。

そうこうしているうちに、symfonyのフォームのrepopulationで使うsfFillInFormFilter.class.phpの存在に気づきました。
http://www.symfony-project.com/book/trunk/fillin
※repopulationとは、フォーム要素への入力値再割り当て?で、要はエラー表示なんかする時に、元々の入力値を要素にデフォルトで表示するようなことです。(一般的ですが、コーディングはライブラリ無しではかなり辛いやつです)

HTML_QuickFormでもライブラリ内でさんざん手を焼いていたものですが、ここではDomDocumentやらDomXPathやらPHP5ならではの機能を使っています。

この手法を応用すると、HTTP_Clientなんかで取ってきたHTMLをPHPで簡単に解析できたりします。

ここで一つ注意しないとはまってしまうのは、エンコーディングです。

$document = new DomDocument('1.0', 'UTF-8');
$document->loadHTML($html);

とUTF-8宣言でやっていても、読み込むHTMLのmetaのContent-Typeが定かでないとどうも文字化けしてしまいます。なので、エンコーディングの指定が必要な場合は特に、読み込ませる元となるHTMLのmetaタグ(Content-Type)の内容まで確認しておきましょう。

//自分の場合ですが、元ネタにContent-Typeすらなかったので追加してるサンプル
//$html はUTF-8です
$html = preg_replace('/<title>/i', '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>', $html);

この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/25262160

この記事へのトラックバック