HTMLエンティティ エンコード / デコード/ & < > "

HTML特殊文字のエスケープとエンティティデコード。名前付きエンティティと数値エンティティに対応。XSS対策に不可欠なツール。

プレーンテキスト
0 文字
HTML エンティティ
0 文字
よく使う HTML エンティティ
&&
<&lt;
>&gt;
"&quot;
'&#39;
©&copy;
®&reg;
&trade;
&nbsp;
&mdash;
&hellip;
«»&laquo;&raquo;

このツールは役に立ちましたか?

HTMLエンコード/デコードツールとは

HTMLエンコード/デコードツールは、プレーンテキストとHTMLエンティティ間の変換を行います。HTMLエンティティは & で始まり ; で終わる特殊コードで、<、>、&、引用符などの特殊文字をHTMLタグとして解析されることなく安全に表示します。

HTMLエンコード/デコードの一般的な使用场景

コードスニペットの表示:ブログやドキュメントでHTML/JavaScriptコードを表示する際、< と > を &lt; と &gt; にエンコード。XSS攻撃の防止:表示前にユーザー入力をエンコードして悪意のあるスクリプト実行を防止。

コード例

JavaScript (Browser)
// Encode using a temporary DOM element (browser only)
function htmlEncode(str) {
  const div = document.createElement('div');
  div.appendChild(document.createTextNode(str));
  return div.innerHTML;
}

// Decode
function htmlDecode(str) {
  const div = document.createElement('div');
  div.innerHTML = str;
  return div.textContent ?? div.innerText;
}

// Manual encode (works in Node.js too)
const escapeHtml = (s) => s
  .replace(/&/g, '&amp;')
  .replace(/</g, '&lt;')
  .replace(/>/g, '&gt;')
  .replace(/"/g, '&quot;')
  .replace(/'/g, '&#39;');
Python
import html

# Encode (escape)
html.escape('<script>alert("xss")</script>')
# '&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;'

# Encode including single quotes
html.escape("it's", quote=True)
# 'it&#x27;s'

# Decode (unescape)
html.unescape('&lt;b&gt;Hello &amp; World&lt;/b&gt;')
# '<b>Hello & World</b>'
Go
import "html"

// Encode
html.EscapeString("<script>alert('xss')</script>")
// "&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;"

// Decode
html.UnescapeString("&lt;b&gt;Hello &amp; World&lt;/b&gt;")
// "<b>Hello & World</b>"

// In templates (auto-escaped)
import "html/template"
t := template.Must(template.New("").Parse(
    "<p>{{.}}</p>"))
t.Execute(os.Stdout, "<b>Hello</b>")
// <p>&lt;b&gt;Hello&lt;/b&gt;</p>
PHP / Twig
<?php
// Encode
htmlspecialchars('<b>Hello</b> & "World"', ENT_QUOTES, 'UTF-8');
// '&lt;b&gt;Hello&lt;/b&gt; &amp; &quot;World&quot;'

// Decode
htmlspecialchars_decode('&lt;b&gt;Hello&lt;/b&gt;');
// '<b>Hello</b>'

// All HTML entities (including named ones)
htmlentities('© 2025 — Café', ENT_QUOTES, 'UTF-8');
// '&copy; 2025 &mdash; Caf&eacute;'

// Twig (auto-escaped by default)
// {{ user_input }}        ← auto-escaped
// {{ user_input|raw }}    ← raw HTML (unsafe!)

よくある質問

なぜHTMLエンティティエンコードが必要ですか?
HTMLでは特定の文字に特別な意味があります:< と > はタグ、& はエンティティ、" は属性値に使用されます。ユーザー入力をそのままHTMLに挿入すると、ブラウザがこれらをHTML構造として解釈し、XSS(クロスサイトスクリプティング)脆弱性が発生します。&lt;、&gt;、&amp;、&quot; などのエンティティにエスケープすることで、ブラウザはコードを実行せずにテキストとして表示します。
名前付きエンティティと数値エンティティの違いは何ですか?
名前付きエンティティは覚えやすい名前を使用します:&amp;(&)、&copy;(©)、&nbsp;(ノーブレークスペース)。数値エンティティはUnicodeコードポイントを使用します:10進数 &#169; または16進数 &#xA9;(どちらも©を意味します)。名前付きエンティティはHTML仕様で定義された文字にのみ存在し、数値エンティティは任意のUnicode文字を表現できます。
HTMLエンコードで最も重要な5つの文字はどれですか?
必須の5文字:& → &amp;(最初にエンコードしないと他のエンティティが壊れます)、< → &lt;、> → &gt;、" → &quot;(属性値内)、' → &#39; または &apos;(属性値内)。その他の文字(日本語、©、€ など)はエンコード不要で、最新のブラウザはUTF-8を完全にサポートしています。
&nbsp; とは何ですか?いつ使いますか?
&nbsp; はノーブレークスペース(U+00A0)です。通常のスペースとの違い:1)ブラウザは &nbsp; の位置で改行しません。2)複数の &nbsp; は1つに折りたたまれません(HTMLは通常、連続するスペースを折りたたみます)。数字と単位の間「100&nbsp;km」のように、固定間隔が必要な場面で使用します。
ReactやVueは自動的にHTMLエンコードしますか?
はい。React JSXとVueテンプレートは、補間されたすべての値をデフォルトでエスケープします。Reactでは <div>{userInput}</div> が特殊文字を自動エンコードし、dangerouslySetInnerHTML のみがこれをバイパスします(細心の注意が必要)。Vueでは {{ userInput }} が自動的にエスケープされ、v-htmlディレクティブのみが生のHTMLを挿入します。
HTMLエンコードとURLエンコードの違いは何ですか?
HTMLエンティティエンコード(&amp;、&lt; など)はHTMLドキュメントコンテキストで特殊文字をエスケープし、HTML解析の曖昧さを防ぎます。URLエンコード(%26、%3C など)はURL/URIコンテキストで非ASCIIおよび予約文字をエスケープします。目的が異なるため混用できません。href属性のリンクでは、まず値をURLエンコードし、次に全体をHTMLエンティティエンコードします。