HTML って型(オブジェクト)として扱うべきなの?

テンプレートを利用してページを表示する際に、Smarty 修正子の escape をデフォルトの modifier として登録したりする。

何も考えずに escape:html とかすると問題が起きる場合がある。実体参照を含む文字列を assign して、それを escape すると2回エスケープ処理を行う事になるので、実体参照の先頭にある & がエスケープされて実体参照がそのまま表示されてしまう。

注意力の問題かもしれないけど、なんだか納得できない。HTML 文字列は2つ(?)の状態を持つってのがややこしいのかな?つまり、レンダリングされた時の文字列と、ソースとしての文字列。HTML を扱う際は、必ず HTML 型を利用して、場面に合わせてデータを取得するっていうアプローチを貫けば面倒も無いかな、と。

よく触る PHP だと、htmlspecialchars っていうエスケープ関数がある。これを使いましょうっていうのがそもそもいけないんだ。いや、正しいんだけど、実際にこれを適用する部分は隠蔽しておいて、何かの処理を書く時には HTML 型からインターフェース経由でデータを取ってきたらいい。

インジェクションがどうこうって話はよく聞くんだけど、それを考慮した型(クラス)が用意されていてそれを使いましょうって話は聞かない。こういう関数があるから、それ使いましょうって話はよく聞くけど。

別に DOM がどうこうって部分は考えてなくて、純粋に文字列として表現される(修飾されない)部分を扱う際に、『考える』労力を減らすべきかなぁ、と。コーディングルールとかプロジェクトルールとかで決めておけば済む話かもしれないけど、ちょっと気になったもんでメモ。

…、間違ってる?んー、わからん。いい事ありそうな気がするんだけど。どうも、こういう初歩的っぽい事ほどよく分かってない気がする。 new が増えるのは良くないのかな?

プロフィール

このブログ記事について

このページは、koshigoeが2006年3月30日 22:15に書いたブログ記事です。

ひとつ前のブログ記事は「my hatena bookmark on 2006-03-29」です。

次のブログ記事は「my hatena bookmark on 2006-03-30」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。