HTMLタグ除去の仕組み
単純な正規表現ではなく、表示DOMから分離した<template>でHTML構造を1回だけ解析し、本文のtext nodeを読み取ります。解析用ノードをこのページの表示DOMへ挿入せず、結果はプレーンテキストとして出力します。
script、style、template、noscriptなど本文ではない要素と、hidden属性の付いた部分は除外します。属性値やコメントも本文には加えません。
改行・表・整形済みテキスト
改行保持モードでは、段落など主要なブロック要素と<br>を改行、表のセルをタブ、行を改行として扱います。<pre>と<textarea>の内部は空白と改行を保ちます。インライン要素の前後へは勝手に空白を追加しません。
外部スタイルシートやJavaScriptを読み込んで実際のレンダリングを再現するツールではありません。CSSのdisplay:none、疑似要素、JavaScript実行後の表示までは反映しません。
仕様と安全性の参考資料
HTMLの解析はWHATWG HTML Standardのtemplate要素を基準にしています。安全なDOM操作についてはOWASP DOM Based XSS Prevention Cheat Sheetも参照してください。本ツールはHTMLを安全化して再利用するサニタイザーではなく、構造からテキストを抽出するためのものです。
よくある質問
HTMLタグをどうやって除去していますか?
ブラウザのHTML parserで構造を解析し、本文のtext nodeから抽出します。タグを正規表現だけで削る方式ではありません。
scriptやstyleの内容も出力されますか?
出力しません。script・style・template・noscript・titleなど本文でない部分は除外します。
<br>や段落の改行はどうなりますか?
改行保持モードではbrと主要なブロック要素の境界を改行として扱います。
HTML entityは変換されますか?
&から&など、HTML parserによる通常の文字参照解釈を1回だけ行います。
表はどうなりますか?
セルをタブ、行を改行で区切ります。colspanやrowspanによる空セルの補完は行いません。
リストに記号や番号は付きますか?
付きません。各リスト項目を1行として抽出します。
画面上で非表示の文字はすべて除外されますか?
完全ではありません。hidden属性は除外しますが、外部CSSのdisplay:noneなどを読み込んで実表示を再現しません。
壊れたHTMLも入力できますか?
ブラウザのHTML parserが通常行うエラー回復結果から抽出します。
URLからWebページ本文を取得できますか?
できません。貼り付けたHTML文字列だけを処理し、外部サイトは取得しません。
入力したHTMLは送信・保存されますか?
ToolPipoのツール処理として外部送信せず、Cookieやブラウザストレージへ保存しません。解析用HTMLも表示DOMへ挿入しません。
HTMLサニタイザーとして使えますか?
使えません。本ツールの出力はプレーンテキストであり、安全化したHTMLを生成するものではありません。
aria-hidden="true"の文字は除外されますか?
aria-hiddenだけでは視覚的な非表示を意味しないため、その属性だけを理由に本文から除外しません。