Yueseryueser.com

← ガイド一覧

HTML タグの除去:残るもの、失われるもの

ページのソースやリッチテキストの書き出しからコピーした文章はタグだらけです。取り除けば、プレーンテキストの欄に貼れる段落だけが残ります。

ツールを開く:HTML タグの除去

本当に必要になる場面

ページの本文をプレーンテキストへ移すときが典型です。メール、Word、チケット、翻訳ファイルはどれもマークアップを必要としません。リッチテキストエディタの書き出しや HTML メールのテンプレートも、再利用前に同じ処理が要ります。

もう一つは比較です。HTML 同士をそのまま差分比較すると属性の違いで画面が埋まりますが、タグを除いてから比べれば言葉の変化だけが見えます。一括整理の下ごしらえとしても使われます。

単純なルールと、その落とし穴

削除されるのは山かっこで囲まれた部分だけです。タグの間の文字は残り、属性はタグと一緒に消えるためリンク先は失われます。文字実体参照は変換されず、& は & のまま、  も実体参照のまま残ります。

script や style の中身は結果に残ります。消えるのはタグで、内側の文字はタグではないからです。ここが最も踏みやすい落とし穴です。本文中の a < b > c のような比較表現もタグとして削除され、閉じていない山かっこは後続の広い範囲を飲み込むことがあります。

代替手段とセキュリティの境界

本文だけを抽出し、ナビゲーションや広告を落としたいなら、リーダーモードや Readability のようなライブラリを使います。リンクの文字と URL の両方を残したいなら、タグを一括削除せず DOM をたどってノードを読みます。不正な入力を扱うなら、正規表現よりブラウザの HTML パーサーが確実です。

セキュリティ対策として使ってはいけません。タグの削除はエスケープではなく、残った実体参照やテキストがマークアップとして解釈される可能性は残ります。XSS 対策は、出力時に文脈に応じてエスケープし、許可リストで無害化し、HTML をサーバー側で生成することです。

よくある質問

&amp; がそのまま残るのはなぜですか?

タグだけを削除し、文字実体参照は変換しないためです。HTML では & を表しますが、ここでは書かれたまま残ります。実際の文字に戻すには実体参照の変換ツールかスクリプトを使ってください。

script の中身が残るのはなぜですか?

script タグ自体は削除されますが、タグの間の文字は内容であり残るためです。消したい場合は、タグではなく script ノードごと削除できる DOM 対応のツールを使ってください。

XSS 対策に使えますか?

使えません。タグの削除はエスケープではなく、残った内容がブラウザに解釈される可能性があります。出力時の文脈別エスケープ、許可リストによる無害化、サーバー側での HTML 生成が必要です。

関連ツール:HTML タグの除去