<
タグを開始する<
意味と文字通りのより小さい記号を意味する意味が混在している場合、どちらが無視する「タグ」であり、どちらがそうでないかを判断できない可能性があります。
できることは<
、次のような厄介で信頼性の低い正規表現を使用して、従来の形式の開始タグまたは終了タグではない使用法を検出することだけです。
<(?!\w+(\s+\w+="[^"<]*")*\s*/?>|/\w+\s*>)
それらを。に置き換えます<
。同様&
に&
:
&(?!\w+;|#\d+;|#x[0-9A-Fa-f]+;)
(>
通常はエスケープする必要はありません。)
これは、要素を構築するためのすべての可能な有効な方法を許可するわけではなく、壊れた誤ってネストされた要素、および存在しないエンティティを許可し、コメントのような非要素構築を台無しにします。正規表現はHTMLを解析できないため、カリカリの壊れたビットが追加されたHTMLは言うまでもありません。
したがって、それはほとんど絶対確実ではありません。誤ってdivを開いたままにしてページを壊さない適切なマークアップが必要な場合、最初の最善のステップは、ページをXHTMLとして解析し、整形式のXMLでない場合はエラーで拒否することです。
リテラル<
がエスケープされていない出力を生成するリッチテキストエディタコンポーネントがある場合は、そのコンポーネントをそれほどひどいものに置き換えるときが来ました。しかし、一般的に、ユーザーがHTMLを作成できるようにすることはお勧めできません。なぜなら、ユーザーはHTMLを本当にごみだらけにしているからです。さらに、誰でもHTMLを入力できるようにすることで、JavaScriptを使用したサイトの破壊とそのセキュリティを完全に制御できます。多くの場合、より単純なテキストマークアップ言語が適しています。