HTMLエンティティデコード
é や é を読めるテキストに戻します。名前付き参照と数値参照(10進数・16進数)に対応し、ブラウザ内で処理します。
すべてブラウザ内で動作します。アップロード、記録、保存は一切行いません。
エスケープ処理を一度多く通ったテキストは、é、é、& だらけになって届きます。このツールはそれを読み戻します。各エンティティはそれが表す文字になり、それ以外はそのまま残ります。
仕組み
名前付き参照はHTML 4.01の表で検索します。& から € まで252個の名前です。数値参照はコードポイントとして、10進数(é)または16進数(é)で読み、どちらの形式でも受け付けます。
参照でないものはすべて、単独のアンパサンドも含めてそのままコピーします。ページから取り出したテキストは中途半端にエスケープされていることがとても多く、迷い込んだ「&」1つのために入力全体を拒否しても誰の役にも立ちません。
例
| ケース | 入力 | 結果 |
|---|---|---|
| 名前付き参照 | café | café |
| 同じ文字をコードポイントで | café and café | café and café |
| 二重にエスケープされたテキストを1回デコード | Tom & Jerry | Tom & Jerry |
よくある質問
デコード後も & が残っています。なぜですか?
二重にエスケープされていたからです。& は & にデコードされ、これは正しい動作です。1回のデコードで取り消せるエスケープは1回分です。もう一度通せば2回目も取り消せます。結果がまだエスケープされていること自体が、たいてい興味深い発見です。処理の流れのどこかで、すでにエスケープ済みの出力をさらにエスケープしているということだからです。
信頼できないテキストをデコードしても安全ですか?
ここでのデコードは安全です。マークアップとしては何も描画されず、結果はプレーンテキストの欄に表示されます。安全でないのは、デコードした結果をページに戻すことです。<script> は本物のタグにデコードされ、それこそがエスケープされていた理由のすべてです。
なぜ結果の が普通のスペースではないのですか?
普通のスペースではないからです。U+00A0、ノーブレークスペースにデコードされます。見た目は同じでも動作が違い、そこで改行されず、検索や比較のコードのほとんどは別の文字として扱います。その違いが、追っているバグそのものであることがよくあります。
HTML5のエンティティ名には対応していますか?
HTML 4.01の252個の名前だけです。HTML5はさらに約2,000個を追加しており、そのほとんどは数学記号です。それらは推測せずにそのまま残します。数値参照はどの文字にも使えます。
知っておきたいこと
- 処理はすべてブラウザ内で行われます。貼り付けた内容がアップロード、記録、保存されることはありません。