• []
  • []
  •  
  • del.icio.us 
  •  
  • Yahoo!֥åޡϿ 

HTMLパーサ&修復 PECL::Tidy

PHP 求人 募集 Symfony CakePHP Smarty Ruby on Rails

HTML修復&パース PECL::Tidy 概要

星の数ほどあるホームページ、Webサイト。
その中で利用されているHTMLをキチンと書いているサイトは果たしてどれほどあるものか。
閲覧するだけなら多少タグの欠落があってもなんとかなるものの、
再利用するとなると話は全然変わってくる。

各種HTML Parserは存在するが、
HTMLを修復できるパーサは珍しい。
その内の一つでメジャーなライブラリにtidyというものがある。
このtidyをラッピングしたPECLモジュールがPECL::tidyである。

HTML修復&パース PECL::Tidy 詳細

HTML修復&パース PECL::Tidy インストール

インストールはCVSから直接ダウンロードしコンパイルを行う。 (なぜかtarで圧縮したものが存在しない。) 実験にはXREAを利用しているが、
さくらインターネットなどのその他のレンタルサーバでもインストールは出来ると思う。

 tidyをインストール

tidyをインストールする。

$ cvs -z3 -d:pserver:anonymous@tidy.cvs.sourceforge.net:/cvsroot/tidy co -P tidy
$ mv tidy tidy-src
$ cd tidy-src
$ /bin/sh build/gnuauto/setup.sh 
$ ./configure --prefix=/virtual/xxxxx/local
$ make
$ make install

 PECL::tidyをインストール

PECL::tidyのバージョン1.xはPHP4用、 PECL::tidyのバージョン2.xはPHP5用である。

 PECL::tidyバージョン1.xをインストール

PECLのサイトからダウンロードしてコンパイルする。
pathが通っている場合はpecl install tidyでも可能。

$ pecl bundle tidy
$ cd tidy
$ phpize
$ ./configure --with-tidy=/virtual/xxxxx/local
$ make
$ cp modules/tidy.so ~/local/lib/php/extensions
 PECL::tidyバージョン2.xをインストール

バージョン2はPHP5に標準でバンドルされている。
phpのコンパイル時に--with-tidy=/path/to/tidyを追加すればOK。
モジュールとしたい場合はsharedを追加するか、
PHPのソースのext/tidyディレクトリを取り出し、
バージョン1.xインストールのphpize以降を実行すればよい。

$ wget http://www.php.net/get/php-5.2.4.tar.gz/from/jp2.php.net/mirror
$ tar xvfz php-5.2.4.tar.gz 
$ cd php-5.2.4/ext/tidy/
$ phpize
$ ./configure --with-tidy=/virtual/xxxxx/local 
$ make
$ cp modules/tidy.so ~/local/lib/php/extensions/

PECL::Tidyをphp.iniに登録

後は他のPECLモジュールと同様php.iniのextensionsに登録する。

; windows
;extension=php_tidy.dll 
; bsd
extension=tidy.so

HTML修復&パース PECL::Tidy 使い方

tidyはフィルターのような使い方をする。
メソッドをごりごりというよりは、
大量に存在するオプションを設定し、
データを通すイメージ。

$source = "<html><head ****";
$options = array(
);
$tidyObj = new tidy;
$tidyObj->parseString($source, $options, 'raw');
$tidyObj->cleanRepair();
echo $tidyObj->value;
// echo $tidyObj->root();  // raw
// echo $tidyObj->head(); // head only
// echo $tidyObj->body(); // body only
// echo $tidyObj->html(); // all html

オプションの設定状態は以下のようにすると確認できる。

$tidyObj = new tidy;
print_r( $tidyObj->getConfig() );

オプションの詳細はこちら。
http://tidy.sourceforge.net/docs/quickref.html

HTML修復&パース PECL::Tidy 補足

tidy内部での日本語対応は諦めること。 予め文字コードを一定にしてから利用することを強く薦める。(utf8が良い)
char-encoding, input-encoding, output-encodingパラメータは文字ではなく数字を指定する。 raw, ascii, latin0, latin1, utf8, iso2022, mac, win1252, ibm858, utf16le, utf16be, utf16, big5, shiftjisで0からの順番。
utf8は4である。
メソッド第3引数の文字コードを指定するところには文字列が使用できる。
これはchar-encodingパラメータとして利用される。
対応日本語文字列にEUC-JPは入っていない。

パーサなのでデータをNodeの配列として処理することも可能。
しかし、配列だけに使い勝手は非常に悪い。
それよりはXMLとして出力して、
高速に処理できるXmlReaderや
XPathが使えるDomやsimpleXMLに渡す方がよい。


pecl/tidy.txt · 最終更新: 2007/09/11 14:03 by dozo