レッスン 4

よくある HTML エンティティの誤り

二重エンコード、decode-as-sanitize、空白バグを避ける。

エンティティバグは「ページ上の文字がおかしい」ように見えますが、パイプライン順序や不可視文字から来ることが多いです。

二重エンコード

すでにエスケープ済みコンテンツの再エンコードが最も頻繁な問題です。症状:

  • ユーザーが © の代わりに © を見る
  • 検索がレンダリングテキストにリテラル < を見つける

入力が 生ユーザーテキスト事前エスケープ保存 か常に把握してください。

decode を sanitize とみなす

&lt;script&gt;alert(1)&lt;/script&gt; をデコードすると <script>alert(1)</script> というテキストが得られます—レンダラーがタグを解釈するなら、sanitize なしで HTML に挿入しても依然危険です。

検査と編集のためにデコード。信頼できない HTML をレンダリングする前に別途 sanitize。

スペースと nbsp の混同

&nbsp;ノンブレークスペース(U+00A0)であり、通常スペース(U+0020)と同じではありません。レイアウトバグ、コピペ不一致、文字列比較が静かに失敗します。

デバッグ時は nbsp とタブを可視化するプレビューを使ってください。

文脈に誤ったエンティティ

HTML では < のエンコードが不可欠。安全のためすべての ASCII 文字をエンコードすると CMS フィールドが読めなくなり全文検索が壊れます。出力形式が要求するものだけエスケープ—それ以上は不要。

無効な数値エンティティ

&#9999999; や不完全な &#xZZ; のような不正な参照は、バッチ処理中に黙って通過させず、明確にエラーとして報告すべきです。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る