PHP で、なぜわざわざ自前で HTML をパースするのか

JAPRO Template Engine の PHP 版では、わざわざ自前で HTML をパースしています。
それにはこんな理由があります。

loadHTML/loadHTMLFile/saveHTML/saveHTMLFile

タグのインデントなど、空白文字が無視されてしまいます。
正確なパースとは言えません。
HTMLを書いた人の意図を無視することは良い事とは思えません。
saveHTML が出力する HTML もゴチャゴチャです。
XHTML は対応出来ないようです。

load/loadXML/save/saveXML

HTMLを読み込ませると、href/src 属性に & がある場合にワーニングとなります。
scriptタグの中も & があるとワーニングとなります。
コメントの終了は –> の前に空白文字がないとワーニングとなります。

とにかくワーニングだらけになります。無理があります。

結局自前で

HTMLの実情に合ったパースを行うには、結局自前でパースする必要があります。
出力の際も自分でツリーをたどって表示する必要があります。

自前でパースする際のヒント

mb_internal_encoding( ‘UTF-8’ )
mb_regex_encoding( ‘UTF-8’ )
mb_regex_set_options( ‘pr’ )

テキスト部分/タグ/残りに分解する正規表現
A(.*?)(<.*?>)(.*)z

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください