HTMLエンティティ完全ガイド
HTMLエンティティはWeb開発する中最も基本にもかかわらず又よくられる误解の側面の一つ。それ们はブラウザできる表示するいいえすなわちできるられる説明するのためにHTMLマークするの字符の机制,かつでWeb安全中发挥ている閉键作用。にかかわらずあなたはでエンコードする特殊字符もって防止する跨站脚本攻撃、表示する数学符号,それとも確保する内容で異なるエンコードする下正しくレンダリングする,理解するHTMLエンティティ正各Web開発者来说すべては必要不可欠ですの。
とはHTMLエンティティ?
HTMLエンティティは代表HTML中単个字符の字符序列。エンティティもってアンパサンド(&)開头,もって分号(;)结尾。時にブラウザ遇までエンティティ时,それできるでレンダリングする期间する其置換するのために相应の字符。これ種類机制許可するあなたでHTML中を含むいいえすなわち不可能またはあり问题の字符。
<)开始一个标签,大于号(>)終了する一つのタグ,アンパサンド(&)開始する一つのエンティティ引用する。もしあなたしたいするこれらの字符表示するのために可见内容そして非マークする,あなた必須するそれ们エンコードするのためにエンティティ。
常见HTMLエンティティ
だがHTML定義するた超たことがある2,000个名前付きエンティティ,しかし少数のいくつかので日常Web開発する中られる頻繁に使用。これらのはあなた最も常遇までと使用のエンティティ:
5つの必須エンティティ
| 字符 | 名前付きエンティティ | 10進数エンティティ | 16進数エンティティ | 使用法 |
|---|---|---|---|---|
| & | & | & | 常にエンコードが必要もって避けるとエンティティ引用するの歧义 | < |
| < | < | < | HTMLタグの開始防止のためにエンコード必須 | > |
| > | > | > | HTMLタグの終了防止のためにエンコード必須 | " |
| " | " | " | ダブルクォート属性値内でエンコード必須 | ' |
| ' | ' | シングルクォート属性値内でエンコード必須 | 改行なしスペース(防止する改行) | 著作権記号 |
よく使う記号エンティティ
| 字符 | 名前付きエンティティ | 説明する |
|---|---|---|
| 登録商標記号 | 商標記号 | 全角ダッシュ(長下線を引く) |
| 短いダッシュ(に使用される範囲) | 左向き二重角引用符 | 右向き二重角引用符 |
| 箇条書き記号 | 水平省略記号(三个点) | Registered trademark symbol |
| ™ | ™
| Trademark symbol |
| — | —
| Em dash (long dash) |
| – | –
| En dash (short dash, for ranges) |
| « | «
| Left-pointing double angle quotation mark |
| » | »
| Right-pointing double angle quotation mark |
| • | •
| Bullet character |
| … | …
| Horizontal ellipsis (three dots) |
数値エンティティと名前付きエンティティ
HTMLエンティティあり两種類形式:命名すると数値。理解する差异に役立つあなたで毎種類情况下選択する正しくのエンティティ。
名前付きエンティティ
<代表小于号,©代表著作権記号。名前付きエンティティより易读と记忆,させるあなたのHTMLソースコードより易維持する。しかし,名前付きエンティティ仅存で于あり限の字符集——約2,000个,そしてUnicode中あり超たことがある140,000个字符。
数値エンティティ
数値エンティティを通じてUnicode码位引用する字符。それ们あり两種類形式:10進数と16進数。10進数数値エンティティ使用フォーマットNNN;,其中NNNは10進数码位。16進数エンティティ使用フォーマットHHH;,其中HHHは16進数码位。例えば,著作権記号できる写成©(10進数)または©(16進数)。
数値エンティティできる表示任意のUnicode字符,させる其に対してない名前付きエンティティ引用するの字符非常に重要です。もしあなた表示する必要があります罕见のCJK字符、历史文字字形または缺少名前付きエンティティの表情符号,あなた必須使用数値形式。
どちらを使用すべきか
- <、>、"、')と常见符号如©、®、™使用名前付きエンティティ。それ们より易读かつ自己文書化。
- 時にあなた必要とするの字符ない名前付きエンティティ时使用数値エンティティ,または時にあなたもってプログラミング方式生成HTMLかつ必要とする一致の通用エンコードする方法时。
- で処理するUnicode码位时使用16進数数値エンティティ,なぜなら16進数はUnicodeドキュメントと字符表中の標準表示法。
HTMLエンティティを使用するタイミング
知っている何时使用エンティティと知っているどのように使用同样重する必要がある。もって下はエンティティ必する必要があるまたはあり益の主にシナリオ:
1. 予約文字の表示
<。もしあなた写一つの裸の<,ブラウザできる尝试する其解析するのためにHTMLタグの開始する,これかもしれない破悪あなたのページレイアウトまたは作成する安全脆弱性。
2. アンパサンドの曖昧さ防止
アンパサンド後跟字母と分号常にられる説明するのためにエンティティ引用する。もしあなたの内容中あり一つの不属于エンティティのアンパサンド(例えばで"Tom & Jerry"中),あなた必須する其エンコードするのために&。未エンコードするのアンパサンド後跟恰良マッチするエンティティ名称の文本するられる間違いデコードする。例えば,未エンコードするの"AT&T"かもしれないになる"AT&T",もしブラウザする&T説明するのためにエンティティ引用する(にもかかわらず&Tいいえ有効エンティティ,これ種類行のためにで技术上まだは間違いの)。
3. キーボードにない文字の挿入
のような全角ダッシュ、著作権記号と数学演算子など字符で標準键盘上かもしれない難もって入力する。エンティティ提供するた一種の信頼できるの方式来を含むこれらの字符,そして不依赖于編集する器の入力する法または字符映射。例えば,—通常比で键盘上検索する全角ダッシュ字符より簡単入力する。
4. 改行なしスペース
エンティティ作成する一つの改行なしスペース,防止するブラウザで该位置改行。これに対してする相閉単词保持同一行非常に重要です,例えば"10 kg"、"第3章"または不应跨行分割のブランド名。それも常に使用されるでCSS不適切のレイアウト中作成する视觉间距。
セキュリティへの影響:XSS対策
HTMLエンティティエンコードするは防御跨站脚本(XSS)攻撃の最も重要の防线の一つ。時に攻撃者できるで其彼用户查看のWebページ中注入可実行するコード时,すぐにできる发生XSS。エンティティエンコードするを通じてする危険字符変換するのために其安全のエンティティなど效项来防止するこれ種類情况。
エンティティエンコーディングがXSSを防ぐ仕組み
そしてページ未エンコードするレンダリングする,ブラウザする実行する该脚本。しかし,もし出力するを経てエンティティエンコードする,それになる<script>alert('xss')</script>,ブラウザする其表示するのために字面文本そして非実行するコード。
コンテキスト別のエンコーディングルール
エンティティエンコードするでHTML内容と属性コンテキスト中有効,しかし異なるのコンテキスト必要とする異なるのエンコードするストラテジー:
- <、>、&エンコードするのためにエンティティ。これは以下を防止します注入新規のHTMLタグ。
- <、>、&、"、'エンコードするのためにエンティティ。引号防止のためにエンコード必須跳出属性值。