HTMLエンティティ
マークアップの文字をエスケープしてテキストとして表示したり、元に戻したりします。
- ブラウザ上で動作します — テキストはどこにも送信されません
- 登録不要、利用回数の上限なし、何度でも無料で使えます
仕組み
信頼できないテキストをエスケープせずにウェブページに入れると、クロスサイトスクリプティングが起こります。エンコードは、ブラウザがマークアップとして扱う文字をエンティティに変換し、実行されずに表示されるようにします。
エンコードされる文字
重要な5つの文字です。アンパサンド、小なり記号、大なり記号、二重引用符、アポストロフィ。アンパサンドを最初にエンコードしないと、後続のすべてが二重にエンコードされてしまいます。
デコード
デコードでは、対応表ではなくブラウザのパーサーを使って、名前付きエンティティと数値エンティティを文字に戻します。そのため、全種類が正しく処理されます。
エンコードされる文字の詳細
エンコードでは5つの文字を置き換えます。&は&に、<は<に、>は>に、"は"に、'は'になります。これで、HTML内や引用符で囲まれた属性内でもテキストを安全に表示できます。アクセント付きの文字や絵文字はそのままです。UTF-8のページはそれらを直接表示できるためです。
デコード
デコードでは、é、—、 などHTMLが定義するすべての名前付きエンティティに加え、10進数または16進数の数値エンティティ(é、é)も処理します。お使いのブラウザ自身のHTMLパーサーを使っているためです。
HTMLエンティティに関するよくある質問
これでサイトはXSSから安全になりますか?
出力のエスケープは必要な対策の一部ですが、安全かどうかは適切なコンテキストでエスケープしているかによります。フレームワークがある場合は、そのエスケープ機能を使ってください。
どの文字をエンコードしますか?
アンパサンド、小なり記号、大なり記号、二重引用符、アポストロフィです。ブラウザがマークアップとして読んでしまう文字が対象です。
テキストはアップロードされますか?
いいえ。エンコードはページ内で実行されます。