XSS対策としてのHTML4エスケープに踏み込んで有名ライブラリの処理を比較してみた

こちらは[Java Advent Calendar 2024](https://qiita.com/advent-calendar/2024/java)の16日目の記事となります。

## HTMLエスケープ
フロントエンドのWebシステムを開発していれば、
XSS（クロスサイトスクリプティング）という脆弱性は耳にしたことある人が大多数ではないかと思っています。
※その点は今回は掘り下げないので、有名な本や記事などで学んでください。

今回はそのXSS対策として行われる各ライブラリが実装しているHTMLエスケープについて注目してみました。
サニタイジング（無害化）の観点では、『&』等のHTML構成要素を実体参照『**& -> \&amp;**』に置き換える事で
HTMLとして機能させなくする意味合いと理解していますが、HTMLエスケープはもう少し広義な意味となっています。
※この点も今回は掘り下げませんので、有名な本や記事などで学んでください。

## 有名ライブラリを比較してみた
HTMLエスケープの実装はそれぞれバラバラだったので、実際に差異があるかどうかを出力して調べてみました。
比較に使用した文字は[HTML4における文字実体参照](https://www.w3.org/TR/html4/sgml/entities.html)から全文字をリストアップしてみました。

### 比較ライブラリ
| ライブラリ名 | エスケープ関数 | 
|-----------|------------|
| Spring Framework | HtmlUtils#htmlEscape |
| Commons Text | StringEscapeUtils#escapeHtml4 |
| unbescape（Thymeleafにて利用） | HtmlEscape#.escapeHtml4 |


### 比較結果
※各ライブラリの結果（3-5列目）の1行目は参照文字を表示、2行目はその文字列を表示
| Unicode | エスケープ前 | Spring Framework | Commons Text | unbescape | 差異有無 |
|:-----------:|:------------:|:------------:|:------------:|:------------:|:------------:|
|U+2309|⌉|&rceil;<br>\&rceil;|&rceil;<br>\&rceil;|&rceil;<br>\&rceil;|true| 
|U+00A0| |&nbsp;<br>\&nbsp;|&nbsp;<br>\&nbsp;|&nbsp;<br>\&nbsp;|true| 
|U+00A1|¡|&iexcl;<br>\&iexcl;|&iexcl;<br>\&iexcl;|&iexcl;<br>\&iexcl;|true| 
|U+00A2|¢|&cent;<br>\&cent;|&cent;<br>\&cent;|&cent;<br>\&cent;|true| 
|U+00A3|£|&pound;<br>\&pound;|&pound;<br>\&pound;|&pound;<br>\&pound;|true| 
|U+230B|⌋|&rfloor;<br>\&rfloor;|&rfloor;<br>\&rfloor;|&rfloor;<br>\&rfloor;|true| 
|U+00A4|¤|&curren;<br>\&curren;|&curren;<br>\&curren;|&curren;<br>\&curren;|true| 
|U+230A|⌊|&lfloor;<br>\&lfloor;|&lfloor;<br>\&lfloor;|&lfloor;<br>\&lfloor;|true| 
|U+00A5|¥|&yen;<br>\&yen;|&yen;<br>\&yen;|&yen;<br>\&yen;|true| 
|U+00A6|¦|&brvbar;<br>\&brvbar;|&brvbar;<br>\&brvbar;|&brvbar;<br>\&brvbar;|true| 
|U+00A7|§|&sect;<br>\&sect;|&sect;<br>\&sect;|&sect;<br>\&sect;|true| 
|U+00A8|¨|&uml;<br>\&uml;|&uml;<br>\&uml;|&uml;<br>\&uml;|true| 
|U+00A9|©|&copy;<br>\&copy;|&copy;<br>\&copy;|&copy;<br>\&copy;|true| 
|U+00AA|ª|&ordf;<br>\&ordf;|&ordf;<br>\&ordf;|&ordf;<br>\&ordf;|true| 
|U+00AB|«|&laquo;<br>\&laquo;|&laquo;<br>\&laquo;|&laquo;<br>\&laquo;|true| 
|U+00AC|¬|&not;<br>\&not;|&not;<br>\&not;|&not;<br>\&not;|true| 
|U+00AD|­|&shy;<br>\&shy;|&shy;<br>\&shy;|&shy;<br>\&shy;|true| 
|U+00AE|®|&reg;<br>\&reg;|&reg;<br>\&reg;|&reg;<br>\&reg;|true| 
|U+00AF|¯|&macr;<br>\&macr;|&macr;<br>\&macr;|&macr;<br>\&macr;|true| 
|U+00B0|°|&deg;<br>\&deg;|&deg;<br>\&deg;|&deg;<br>\&deg;|true| 
|U+00B1|±|&plusmn;<br>\&plusmn;|&plusmn;<br>\&plusmn;|&plusmn;<br>\&plusmn;|true| 
|U+00B2|²|&sup2;<br>\&sup2;|&sup2;<br>\&sup2;|&sup2;<br>\&sup2;|true| 
|U+00B3|³|&sup3;<br>\&sup3;|&sup3;<br>\&sup3;|&sup3;<br>\&sup3;|true| 
|U+00B4|´|&acute;<br>\&acute;|&acute;<br>\&acute;|&acute;<br>\&acute;|true| 
|U+00B5|µ|&micro;<br>\&micro;|&micro;<br>\&micro;|&micro;<br>\&micro;|true| 
|U+00B6|¶|&para;<br>\&para;|&para;<br>\&para;|&para;<br>\&para;|true| 
|U+00B7|·|&middot;<br>\&middot;|&middot;<br>\&middot;|&middot;<br>\&middot;|true| 
|U+00B8|¸|&cedil;<br>\&cedil;|&cedil;<br>\&cedil;|&cedil;<br>\&cedil;|true| 
|U+00B9|¹|&sup1;<br>\&sup1;|&sup1;<br>\&sup1;|&sup1;<br>\&sup1;|true| 
|U+00BA|º|&ordm;<br>\&ordm;|&ordm;<br>\&ordm;|&ordm;<br>\&ordm;|true| 
|U+00BB|»|&raquo;<br>\&raquo;|&raquo;<br>\&raquo;|&raquo;<br>\&raquo;|true| 
|U+0022|"|&quot;<br>\&quot;|&quot;<br>\&quot;|&quot;<br>\&quot;|true| 
|U+00BC|¼|&frac14;<br>\&frac14;|&frac14;<br>\&frac14;|&frac14;<br>\&frac14;|true| 
|U+2200|∀|&forall;<br>\&forall;|&forall;<br>\&forall;|&forall;<br>\&forall;|true| 
|U+00BD|½|&frac12;<br>\&frac12;|&frac12;<br>\&frac12;|&frac12;<br>\&frac12;|true| 
|U+2203|∃|&exist;<br>\&exist;|&exist;<br>\&exist;|&exist;<br>\&exist;|true| 
|U+00BE|¾|&frac34;<br>\&frac34;|&frac34;<br>\&frac34;|&frac34;<br>\&frac34;|true| 
|U+2202|∂|&part;<br>\&part;|&part;<br>\&part;|&part;<br>\&part;|true| 
|U+00BF|¿|&iquest;<br>\&iquest;|&iquest;<br>\&iquest;|&iquest;<br>\&iquest;|true| 
|U+2205|∅|&empty;<br>\&empty;|&empty;<br>\&empty;|&empty;<br>\&empty;|true| 
|U+0026|&|&amp;<br>\&amp;|&amp;<br>\&amp;|&amp;<br>\&amp;|true| 
|U+2207|∇|&nabla;<br>\&nabla;|&nabla;<br>\&nabla;|&nabla;<br>\&nabla;|true| 
|U+2209|∉|&notin;<br>\&notin;|&notin;<br>\&notin;|&notin;<br>\&notin;|true| 
|U+2208|∈|&isin;<br>\&isin;|&isin;<br>\&isin;|&isin;<br>\&isin;|true| 
|U+2329|〈|&lang;<br>\&lang;|&lang;<br>\&lang;|&lang;<br>\&lang;|true| 
|U+00C0|À|&Agrave;<br>\&Agrave;|&Agrave;<br>\&Agrave;|&Agrave;<br>\&Agrave;|true| 
|U+00C1|Á|&Aacute;<br>\&Aacute;|&Aacute;<br>\&Aacute;|&Aacute;<br>\&Aacute;|true| 
|U+00C2|Â|&Acirc;<br>\&Acirc;|&Acirc;<br>\&Acirc;|&Acirc;<br>\&Acirc;|true| 
|U+00C3|Ã|&Atilde;<br>\&Atilde;|&Atilde;<br>\&Atilde;|&Atilde;<br>\&Atilde;|true| 
|U+00C4|Ä|&Auml;<br>\&Auml;|&Auml;<br>\&Auml;|&Auml;<br>\&Auml;|true| 
|U+232A|〉|&rang;<br>\&rang;|&rang;<br>\&rang;|&rang;<br>\&rang;|true| 
|U+00C5|Å|&Aring;<br>\&Aring;|&Aring;<br>\&Aring;|&Aring;<br>\&Aring;|true| 
|U+00C6|Æ|&AElig;<br>\&AElig;|&AElig;<br>\&AElig;|&#198;<br>\&#198;|false| 
|U+220B|∋|&ni;<br>\&ni;|&ni;<br>\&ni;|&ni;<br>\&ni;|true| 
|U+00C7|Ç|&Ccedil;<br>\&Ccedil;|&Ccedil;<br>\&Ccedil;|&Ccedil;<br>\&Ccedil;|true| 
|U+00C8|È|&Egrave;<br>\&Egrave;|&Egrave;<br>\&Egrave;|&Egrave;<br>\&Egrave;|true| 
|U+22A5|⊥|&perp;<br>\&perp;|&perp;<br>\&perp;|&perp;<br>\&perp;|true| 
|U+00C9|É|&Eacute;<br>\&Eacute;|&Eacute;<br>\&Eacute;|&Eacute;<br>\&Eacute;|true| 
|U+220F|∏|&prod;<br>\&prod;|&prod;<br>\&prod;|&prod;<br>\&prod;|true| 
|U+0391|Α|&Alpha;<br>\&Alpha;|&Alpha;<br>\&Alpha;|&Alpha;<br>\&Alpha;|true| 
|U+0392|Β|&Beta;<br>\&Beta;|&Beta;<br>\&Beta;|&Beta;<br>\&Beta;|true| 
|U+0393|Γ|&Gamma;<br>\&Gamma;|&Gamma;<br>\&Gamma;|&Gamma;<br>\&Gamma;|true| 
|U+00CA|Ê|&Ecirc;<br>\&Ecirc;|&Ecirc;<br>\&Ecirc;|&Ecirc;<br>\&Ecirc;|true| 
|U+0394|Δ|&Delta;<br>\&Delta;|&Delta;<br>\&Delta;|&Delta;<br>\&Delta;|true| 
|U+0152|Œ|&OElig;<br>\&OElig;|&OElig;<br>\&OElig;|&OElig;<br>\&OElig;|true| 
|U+00CB|Ë|&Euml;<br>\&Euml;|&Euml;<br>\&Euml;|&Euml;<br>\&Euml;|true| 
|U+0395|Ε|&Epsilon;<br>\&Epsilon;|&Epsilon;<br>\&Epsilon;|&Epsilon;<br>\&Epsilon;|true| 
|U+0153|œ|&oelig;<br>\&oelig;|&oelig;<br>\&oelig;|&oelig;<br>\&oelig;|true| 
|U+00CC|Ì|&Igrave;<br>\&Igrave;|&Igrave;<br>\&Igrave;|&Igrave;<br>\&Igrave;|true| 
|U+0396|Ζ|&Zeta;<br>\&Zeta;|&Zeta;<br>\&Zeta;|&Zeta;<br>\&Zeta;|true| 
|U+2212|−|&minus;<br>\&minus;|&minus;<br>\&minus;|&minus;<br>\&minus;|true| 
|U+00CD|Í|&Iacute;<br>\&Iacute;|&Iacute;<br>\&Iacute;|&Iacute;<br>\&Iacute;|true| 
|U+0397|Η|&Eta;<br>\&Eta;|&Eta;<br>\&Eta;|&Eta;<br>\&Eta;|true| 
|U+2211|∑|&sum;<br>\&sum;|&sum;<br>\&sum;|&sum;<br>\&sum;|true| 
|U+00CE|Î|&Icirc;<br>\&Icirc;|&Icirc;<br>\&Icirc;|&Icirc;<br>\&Icirc;|true| 
|U+0398|Θ|&Theta;<br>\&Theta;|&Theta;<br>\&Theta;|&Theta;<br>\&Theta;|true| 
|U+00CF|Ï|&Iuml;<br>\&Iuml;|&Iuml;<br>\&Iuml;|&Iuml;<br>\&Iuml;|true| 
|U+0399|Ι|&Iota;<br>\&Iota;|&Iota;<br>\&Iota;|&Iota;<br>\&Iota;|true| 
|U+2217|∗|&lowast;<br>\&lowast;|&lowast;<br>\&lowast;|&lowast;<br>\&lowast;|true| 
|U+039A|Κ|&Kappa;<br>\&Kappa;|&Kappa;<br>\&Kappa;|&Kappa;<br>\&Kappa;|true| 
|U+00D0|Ð|&ETH;<br>\&ETH;|&ETH;<br>\&ETH;|&ETH;<br>\&ETH;|true| 
|U+039B|Λ|&Lambda;<br>\&Lambda;|&Lambda;<br>\&Lambda;|&Lambda;<br>\&Lambda;|true| 
|U+00D1|Ñ|&Ntilde;<br>\&Ntilde;|&Ntilde;<br>\&Ntilde;|&Ntilde;<br>\&Ntilde;|true| 
|U+039C|Μ|&Mu;<br>\&Mu;|&Mu;<br>\&Mu;|&Mu;<br>\&Mu;|true| 
|U+00D2|Ò|&Ograve;<br>\&Ograve;|&Ograve;<br>\&Ograve;|&Ograve;<br>\&Ograve;|true| 
|U+039D|Ν|&Nu;<br>\&Nu;|&Nu;<br>\&Nu;|&Nu;<br>\&Nu;|true| 
|U+00D3|Ó|&Oacute;<br>\&Oacute;|&Oacute;<br>\&Oacute;|&Oacute;<br>\&Oacute;|true| 
|U+039E|Ξ|&Xi;<br>\&Xi;|&Xi;<br>\&Xi;|&Xi;<br>\&Xi;|true| 
|U+00D4|Ô|&Ocirc;<br>\&Ocirc;|&Ocirc;<br>\&Ocirc;|&Ocirc;<br>\&Ocirc;|true| 
|U+039F|Ο|&Omicron;<br>\&Omicron;|&Omicron;<br>\&Omicron;|&Omicron;<br>\&Omicron;|true| 
|U+003C|<|&lt;<br>\&lt;|&lt;<br>\&lt;|&lt;<br>\&lt;|true| 
|U+00D5|Õ|&Otilde;<br>\&Otilde;|&Otilde;<br>\&Otilde;|&Otilde;<br>\&Otilde;|true| 
|U+221A|√|&radic;<br>\&radic;|&radic;<br>\&radic;|&radic;<br>\&radic;|true| 
|U+00D6|Ö|&Ouml;<br>\&Ouml;|&Ouml;<br>\&Ouml;|&Ouml;<br>\&Ouml;|true| 
|U+221D|∝|&prop;<br>\&prop;|&prop;<br>\&prop;|&prop;<br>\&prop;|true| 
|U+003E|>|&gt;<br>\&gt;|&gt;<br>\&gt;|&gt;<br>\&gt;|true| 
|U+00D7|×|&times;<br>\&times;|&times;<br>\&times;|&times;<br>\&times;|true| 
|U+00D8|Ø|&Oslash;<br>\&Oslash;|&Oslash;<br>\&Oslash;|&Oslash;<br>\&Oslash;|true| 
|U+00D9|Ù|&Ugrave;<br>\&Ugrave;|&Ugrave;<br>\&Ugrave;|&Ugrave;<br>\&Ugrave;|true| 
|U+221E|∞|&infin;<br>\&infin;|&infin;<br>\&infin;|&infin;<br>\&infin;|true| 
|U+0160|Š|&Scaron;<br>\&Scaron;|&Scaron;<br>\&Scaron;|&Scaron;<br>\&Scaron;|true| 
|U+0161|š|&scaron;<br>\&scaron;|&scaron;<br>\&scaron;|&scaron;<br>\&scaron;|true| 
|U+00DA|Ú|&Uacute;<br>\&Uacute;|&Uacute;<br>\&Uacute;|&Uacute;<br>\&Uacute;|true| 
|U+00DB|Û|&Ucirc;<br>\&Ucirc;|&Ucirc;<br>\&Ucirc;|&Ucirc;<br>\&Ucirc;|true| 
|U+00DC|Ü|&Uuml;<br>\&Uuml;|&Uuml;<br>\&Uuml;|&Uuml;<br>\&Uuml;|true| 
|U+2220|∠|&ang;<br>\&ang;|&ang;<br>\&ang;|&ang;<br>\&ang;|true| 
|U+00DD|Ý|&Yacute;<br>\&Yacute;|&Yacute;<br>\&Yacute;|&Yacute;<br>\&Yacute;|true| 
|U+00DE|Þ|&THORN;<br>\&THORN;|&THORN;<br>\&THORN;|&THORN;<br>\&THORN;|true| 
|U+00DF|ß|&szlig;<br>\&szlig;|&szlig;<br>\&szlig;|&szlig;<br>\&szlig;|true| 
|U+2227|∧|&and;<br>\&and;|&and;<br>\&and;|&and;<br>\&and;|true| 
|U+2229|∩|&cap;<br>\&cap;|&cap;<br>\&cap;|&cap;<br>\&cap;|true| 
|U+2228|∨|&or;<br>\&or;|&or;<br>\&or;|&or;<br>\&or;|true| 
|U+03C0|π|&pi;<br>\&pi;|&pi;<br>\&pi;|&pi;<br>\&pi;|true| 
|U+03C1|ρ|&rho;<br>\&rho;|&rho;<br>\&rho;|&rho;<br>\&rho;|true| 
|U+03C2|ς|&sigmaf;<br>\&sigmaf;|&sigmaf;<br>\&sigmaf;|&sigmaf;<br>\&sigmaf;|true| 
|U+03C3|σ|&sigma;<br>\&sigma;|&sigma;<br>\&sigma;|&sigma;<br>\&sigma;|true| 
|U+03C4|τ|&tau;<br>\&tau;|&tau;<br>\&tau;|&tau;<br>\&tau;|true| 
|U+03C5|υ|&upsilon;<br>\&upsilon;|&upsilon;<br>\&upsilon;|&upsilon;<br>\&upsilon;|true| 
|U+03C6|φ|&phi;<br>\&phi;|&phi;<br>\&phi;|&phi;<br>\&phi;|true| 
|U+2191|↑|&uarr;<br>\&uarr;|&uarr;<br>\&uarr;|&uarr;<br>\&uarr;|true| 
|U+03C7|χ|&chi;<br>\&chi;|&chi;<br>\&chi;|&chi;<br>\&chi;|true| 
|U+2190|←|&larr;<br>\&larr;|&larr;<br>\&larr;|&larr;<br>\&larr;|true| 
|U+03C8|ψ|&psi;<br>\&psi;|&psi;<br>\&psi;|&psi;<br>\&psi;|true| 
|U+2193|↓|&darr;<br>\&darr;|&darr;<br>\&darr;|&darr;<br>\&darr;|true| 
|U+03C9|ω|&omega;<br>\&omega;|&omega;<br>\&omega;|&omega;<br>\&omega;|true| 
|U+2192|→|&rarr;<br>\&rarr;|&rarr;<br>\&rarr;|&rarr;<br>\&rarr;|true| 
|U+2194|↔|&harr;<br>\&harr;|&harr;<br>\&harr;|&harr;<br>\&harr;|true| 
|U+03D1|ϑ|&thetasym;<br>\&thetasym;|&thetasym;<br>\&thetasym;|&thetasym;<br>\&thetasym;|true| 
|U+03D2|ϒ|&upsih;<br>\&upsih;|&upsih;<br>\&upsih;|&upsih;<br>\&upsih;|true| 
|U+03D6|ϖ|&piv;<br>\&piv;|&piv;<br>\&piv;|&piv;<br>\&piv;|true| 
|U+02C6|ˆ|&circ;<br>\&circ;|&circ;<br>\&circ;|&circ;<br>\&circ;|true| 
|U+25CA|◊|&loz;<br>\&loz;|&loz;<br>\&loz;|&loz;<br>\&loz;|true| 
|U+2660|♠|&spades;<br>\&spades;|&spades;<br>\&spades;|&spades;<br>\&spades;|true| 
|U+2663|♣|&clubs;<br>\&clubs;|&clubs;<br>\&clubs;|&clubs;<br>\&clubs;|true| 
|U+02DC|˜|&tilde;<br>\&tilde;|&tilde;<br>\&tilde;|&tilde;<br>\&tilde;|true| 
|U+2665|♥|&hearts;<br>\&hearts;|&hearts;<br>\&hearts;|&hearts;<br>\&hearts;|true| 
|U+2666|♦|&diams;<br>\&diams;|&diams;<br>\&diams;|&diams;<br>\&diams;|true| 
|U+2308|⌈|&lceil;<br>\&lceil;|&lceil;<br>\&lceil;|&lceil;<br>\&lceil;|true| 
|U+2030|‰|&permil;<br>\&permil;|&permil;<br>\&permil;|&permil;<br>\&permil;|true| 
|U+2032|′|&prime;<br>\&prime;|&prime;<br>\&prime;|&prime;<br>\&prime;|true| 
|U+2033|″|&Prime;<br>\&Prime;|&Prime;<br>\&Prime;|&Prime;<br>\&Prime;|true| 
|U+2039|‹|&lsaquo;<br>\&lsaquo;|&lsaquo;<br>\&lsaquo;|&lsaquo;<br>\&lsaquo;|true| 
|U+203A|›|&rsaquo;<br>\&rsaquo;|&rsaquo;<br>\&rsaquo;|&rsaquo;<br>\&rsaquo;|true| 
|U+203E|‾|&oline;<br>\&oline;|&oline;<br>\&oline;|&oline;<br>\&oline;|true| 
|U+2283|⊃|&sup;<br>\&sup;|&sup;<br>\&sup;|&sup;<br>\&sup;|true| 
|U+2282|⊂|&sub;<br>\&sub;|&sub;<br>\&sub;|&sub;<br>\&sub;|true| 
|U+2284|⊄|&nsub;<br>\&nsub;|&nsub;<br>\&nsub;|&nsub;<br>\&nsub;|true| 
|U+2287|⊇|&supe;<br>\&supe;|&supe;<br>\&supe;|&supe;<br>\&supe;|true| 
|U+2044|⁄|&frasl;<br>\&frasl;|&frasl;<br>\&frasl;|&frasl;<br>\&frasl;|true| 
|U+2286|⊆|&sube;<br>\&sube;|&sube;<br>\&sube;|&sube;<br>\&sube;|true| 
|U+03A0|Π|&Pi;<br>\&Pi;|&Pi;<br>\&Pi;|&Pi;<br>\&Pi;|true| 
|U+03A1|Ρ|&Rho;<br>\&Rho;|&Rho;<br>\&Rho;|&Rho;<br>\&Rho;|true| 
|U+03A3|Σ|&Sigma;<br>\&Sigma;|&Sigma;<br>\&Sigma;|&Sigma;<br>\&Sigma;|true| 
|U+03A4|Τ|&Tau;<br>\&Tau;|&Tau;<br>\&Tau;|&Tau;<br>\&Tau;|true| 
|U+03A5|Υ|&Upsilon;<br>\&Upsilon;|&Upsilon;<br>\&Upsilon;|&Upsilon;<br>\&Upsilon;|true| 
|U+03A6|Φ|&Phi;<br>\&Phi;|&Phi;<br>\&Phi;|&Phi;<br>\&Phi;|true| 
|U+03A7|Χ|&Chi;<br>\&Chi;|&Chi;<br>\&Chi;|&Chi;<br>\&Chi;|true| 
|U+03A8|Ψ|&Psi;<br>\&Psi;|&Psi;<br>\&Psi;|&Psi;<br>\&Psi;|true| 
|U+03A9|Ω|&Omega;<br>\&Omega;|&Omega;<br>\&Omega;|&Omega;<br>\&Omega;|true| 
|U+2295|⊕|&oplus;<br>\&oplus;|&oplus;<br>\&oplus;|&oplus;<br>\&oplus;|true| 
|U+2297|⊗|&otimes;<br>\&otimes;|&otimes;<br>\&otimes;|&otimes;<br>\&otimes;|true| 
|U+03B1|α|&alpha;<br>\&alpha;|&alpha;<br>\&alpha;|&alpha;<br>\&alpha;|true| 
|U+03B2|β|&beta;<br>\&beta;|&beta;<br>\&beta;|&beta;<br>\&beta;|true| 
|U+03B3|γ|&gamma;<br>\&gamma;|&gamma;<br>\&gamma;|&gamma;<br>\&gamma;|true| 
|U+03B4|δ|&delta;<br>\&delta;|&delta;<br>\&delta;|&delta;<br>\&delta;|true| 
|U+03B5|ε|&epsilon;<br>\&epsilon;|&epsilon;<br>\&epsilon;|&epsilon;<br>\&epsilon;|true| 
|U+03B6|ζ|&zeta;<br>\&zeta;|&zeta;<br>\&zeta;|&zeta;<br>\&zeta;|true| 
|U+03B7|η|&eta;<br>\&eta;|&eta;<br>\&eta;|&eta;<br>\&eta;|true| 
|U+03B8|θ|&theta;<br>\&theta;|&theta;<br>\&theta;|&theta;<br>\&theta;|true| 
|U+03B9|ι|&iota;<br>\&iota;|&iota;<br>\&iota;|&iota;<br>\&iota;|true| 
|U+03BA|κ|&kappa;<br>\&kappa;|&kappa;<br>\&kappa;|&kappa;<br>\&kappa;|true| 
|U+03BB|λ|&lambda;<br>\&lambda;|&lambda;<br>\&lambda;|&lambda;<br>\&lambda;|true| 
|U+03BC|μ|&mu;<br>\&mu;|&mu;<br>\&mu;|&mu;<br>\&mu;|true| 
|U+03BD|ν|&nu;<br>\&nu;|&nu;<br>\&nu;|&nu;<br>\&nu;|true| 
|U+03BE|ξ|&xi;<br>\&xi;|&xi;<br>\&xi;|&xi;<br>\&xi;|true| 
|U+03BF|ο|&omicron;<br>\&omicron;|&omicron;<br>\&omicron;|&omicron;<br>\&omicron;|true| 
|U+00E0|à|&agrave;<br>\&agrave;|&agrave;<br>\&agrave;|&agrave;<br>\&agrave;|true| 
|U+00E1|á|&aacute;<br>\&aacute;|&aacute;<br>\&aacute;|&aacute;<br>\&aacute;|true| 
|U+00E2|â|&acirc;<br>\&acirc;|&acirc;<br>\&acirc;|&acirc;<br>\&acirc;|true| 
|U+00E3|ã|&atilde;<br>\&atilde;|&atilde;<br>\&atilde;|&atilde;<br>\&atilde;|true| 
|U+222A|∪|&cup;<br>\&cup;|&cup;<br>\&cup;|&cup;<br>\&cup;|true| 
|U+00E4|ä|&auml;<br>\&auml;|&auml;<br>\&auml;|&auml;<br>\&auml;|true| 
|U+00E5|å|&aring;<br>\&aring;|&aring;<br>\&aring;|&aring;<br>\&aring;|true| 
|U+00E6|æ|&aelig;<br>\&aelig;|&aelig;<br>\&aelig;|&aelig;<br>\&aelig;|true| 
|U+222B|∫|&int;<br>\&int;|&int;<br>\&int;|&int;<br>\&int;|true| 
|U+00E7|ç|&ccedil;<br>\&ccedil;|&ccedil;<br>\&ccedil;|&ccedil;<br>\&ccedil;|true| 
|U+00E8|è|&egrave;<br>\&egrave;|&egrave;<br>\&egrave;|&egrave;<br>\&egrave;|true| 
|U+22C5|⋅|&sdot;<br>\&sdot;|&sdot;<br>\&sdot;|&sdot;<br>\&sdot;|true| 
|U+00E9|é|&eacute;<br>\&eacute;|&eacute;<br>\&eacute;|&eacute;<br>\&eacute;|true| 
|U+00EA|ê|&ecirc;<br>\&ecirc;|&ecirc;<br>\&ecirc;|&ecirc;<br>\&ecirc;|true| 
|U+00EB|ë|&euml;<br>\&euml;|&euml;<br>\&euml;|&euml;<br>\&euml;|true| 
|U+00EC|ì|&igrave;<br>\&igrave;|&igrave;<br>\&igrave;|&igrave;<br>\&igrave;|true| 
|U+2111|ℑ|&image;<br>\&image;|&image;<br>\&image;|&image;<br>\&image;|true| 
|U+00ED|í|&iacute;<br>\&iacute;|&iacute;<br>\&iacute;|&iacute;<br>\&iacute;|true| 
|U+00EE|î|&icirc;<br>\&icirc;|&icirc;<br>\&icirc;|&icirc;<br>\&icirc;|true| 
|U+2234|∴|&there4;<br>\&there4;|&there4;<br>\&there4;|&there4;<br>\&there4;|true| 
|U+00EF|ï|&iuml;<br>\&iuml;|&iuml;<br>\&iuml;|&iuml;<br>\&iuml;|true| 
|U+0178|Ÿ|&Yuml;<br>\&Yuml;|&Yuml;<br>\&Yuml;|&Yuml;<br>\&Yuml;|true| 
|U+2118|℘|&weierp;<br>\&weierp;|&weierp;<br>\&weierp;|&weierp;<br>\&weierp;|true| 
|U+00F0|ð|&eth;<br>\&eth;|&eth;<br>\&eth;|&eth;<br>\&eth;|true| 
|U+00F1|ñ|&ntilde;<br>\&ntilde;|&ntilde;<br>\&ntilde;|&ntilde;<br>\&ntilde;|true| 
|U+00F2|ò|&ograve;<br>\&ograve;|&ograve;<br>\&ograve;|&ograve;<br>\&ograve;|true| 
|U+00F3|ó|&oacute;<br>\&oacute;|&oacute;<br>\&oacute;|&oacute;<br>\&oacute;|true| 
|U+00F4|ô|&ocirc;<br>\&ocirc;|&ocirc;<br>\&ocirc;|&ocirc;<br>\&ocirc;|true| 
|U+00F5|õ|&otilde;<br>\&otilde;|&otilde;<br>\&otilde;|&otilde;<br>\&otilde;|true| 
|U+00F6|ö|&ouml;<br>\&ouml;|&ouml;<br>\&ouml;|&ouml;<br>\&ouml;|true| 
|U+211C|ℜ|&real;<br>\&real;|&real;<br>\&real;|&real;<br>\&real;|true| 
|U+00F7|÷|&divide;<br>\&divide;|&divide;<br>\&divide;|&divide;<br>\&divide;|true| 
|U+223C|∼|&sim;<br>\&sim;|&sim;<br>\&sim;|&sim;<br>\&sim;|true| 
|U+00F8|ø|&oslash;<br>\&oslash;|&oslash;<br>\&oslash;|&oslash;<br>\&oslash;|true| 
|U+00F9|ù|&ugrave;<br>\&ugrave;|&ugrave;<br>\&ugrave;|&ugrave;<br>\&ugrave;|true| 
|U+21B5|↵|&crarr;<br>\&crarr;|&crarr;<br>\&crarr;|&crarr;<br>\&crarr;|true| 
|U+00FA|ú|&uacute;<br>\&uacute;|&uacute;<br>\&uacute;|&uacute;<br>\&uacute;|true| 
|U+00FB|û|&ucirc;<br>\&ucirc;|&ucirc;<br>\&ucirc;|&ucirc;<br>\&ucirc;|true| 
|U+00FC|ü|&uuml;<br>\&uuml;|&uuml;<br>\&uuml;|&uuml;<br>\&uuml;|true| 
|U+00FD|ý|&yacute;<br>\&yacute;|&yacute;<br>\&yacute;|&yacute;<br>\&yacute;|true| 
|U+2122|™|&trade;<br>\&trade;|&trade;<br>\&trade;|&trade;<br>\&trade;|true| 
|U+00FE|þ|&thorn;<br>\&thorn;|&thorn;<br>\&thorn;|&thorn;<br>\&thorn;|true| 
|U+00FF|ÿ|&yuml;<br>\&yuml;|&yuml;<br>\&yuml;|&yuml;<br>\&yuml;|true| 
|U+2245|≅|&cong;<br>\&cong;|&cong;<br>\&cong;|&cong;<br>\&cong;|true| 
|U+2003| |&emsp;<br>\&emsp;|&emsp;<br>\&emsp;|&emsp;<br>\&emsp;|true| 
|U+2002| |&ensp;<br>\&ensp;|&ensp;<br>\&ensp;|&ensp;<br>\&ensp;|true| 
|U+2248|≈|&asymp;<br>\&asymp;|&asymp;<br>\&asymp;|&asymp;<br>\&asymp;|true| 
|U+2009| |&thinsp;<br>\&thinsp;|&thinsp;<br>\&thinsp;|&thinsp;<br>\&thinsp;|true| 
|U+200C|‌|&zwnj;<br>\&zwnj;|&zwnj;<br>\&zwnj;|&zwnj;<br>\&zwnj;|true| 
|U+200E|‎|&lrm;<br>\&lrm;|&lrm;<br>\&lrm;|&lrm;<br>\&lrm;|true| 
|U+200D|‍|&zwj;<br>\&zwj;|&zwj;<br>\&zwj;|&zwj;<br>\&zwj;|true| 
|U+200F|‏|&rlm;<br>\&rlm;|&rlm;<br>\&rlm;|&rlm;<br>\&rlm;|true| 
|U+0192|ƒ|&fnof;<br>\&fnof;|&fnof;<br>\&fnof;|&fnof;<br>\&fnof;|true| 
|U+2135|ℵ|&alefsym;<br>\&alefsym;|&alefsym;<br>\&alefsym;|&alefsym;<br>\&alefsym;|true| 
|U+2014|—|&mdash;<br>\&mdash;|&mdash;<br>\&mdash;|&mdash;<br>\&mdash;|true| 
|U+2013|–|&ndash;<br>\&ndash;|&ndash;<br>\&ndash;|&ndash;<br>\&ndash;|true| 
|U+20AC|€|&euro;<br>\&euro;|&euro;<br>\&euro;|&euro;<br>\&euro;|true| 
|U+2018|‘|&lsquo;<br>\&lsquo;|&lsquo;<br>\&lsquo;|&lsquo;<br>\&lsquo;|true| 
|U+2019|’|&rsquo;<br>\&rsquo;|&rsquo;<br>\&rsquo;|&rsquo;<br>\&rsquo;|true| 
|U+21D0|⇐|&lArr;<br>\&lArr;|&lArr;<br>\&lArr;|&lArr;<br>\&lArr;|true| 
|U+21D2|⇒|&rArr;<br>\&rArr;|&rArr;<br>\&rArr;|&rArr;<br>\&rArr;|true| 
|U+21D1|⇑|&uArr;<br>\&uArr;|&uArr;<br>\&uArr;|&uArr;<br>\&uArr;|true| 
|U+21D4|⇔|&hArr;<br>\&hArr;|&hArr;<br>\&hArr;|&hArr;<br>\&hArr;|true| 
|U+21D3|⇓|&dArr;<br>\&dArr;|&dArr;<br>\&dArr;|&dArr;<br>\&dArr;|true| 
|U+201A|‚|&sbquo;<br>\&sbquo;|&sbquo;<br>\&sbquo;|&sbquo;<br>\&sbquo;|true| 
|U+201D|”|&rdquo;<br>\&rdquo;|&rdquo;<br>\&rdquo;|&rdquo;<br>\&rdquo;|true| 
|U+201C|“|&ldquo;<br>\&ldquo;|&ldquo;<br>\&ldquo;|&ldquo;<br>\&ldquo;|true| 
|U+201E|„|&bdquo;<br>\&bdquo;|&bdquo;<br>\&bdquo;|&bdquo;<br>\&bdquo;|true| 
|U+2261|≡|&equiv;<br>\&equiv;|&equiv;<br>\&equiv;|&equiv;<br>\&equiv;|true| 
|U+2260|≠|&ne;<br>\&ne;|&ne;<br>\&ne;|&ne;<br>\&ne;|true| 
|U+2021|‡|&Dagger;<br>\&Dagger;|&Dagger;<br>\&Dagger;|&Dagger;<br>\&Dagger;|true| 
|U+2020|†|&dagger;<br>\&dagger;|&dagger;<br>\&dagger;|&dagger;<br>\&dagger;|true| 
|U+2265|≥|&ge;<br>\&ge;|&ge;<br>\&ge;|&ge;<br>\&ge;|true| 
|U+2022|•|&bull;<br>\&bull;|&bull;<br>\&bull;|&bull;<br>\&bull;|true| 
|U+2264|≤|&le;<br>\&le;|&le;<br>\&le;|&le;<br>\&le;|true| 
|U+2026|…|&hellip;<br>\&hellip;|&hellip;<br>\&hellip;|&hellip;<br>\&hellip;|true| 


## 考察
おしい、1点だけ結果に差異を発見しました。

### 『Æ』（U+00C6）
文字実体参照か数値文字参照かの違いなので結果としての見え方に差異はないです。
これは、なんか処理が不足してたりしないか**unbescape**のソースコード見てみたいところです。

# さいごに
XSS対策のサニタイジング用として使われているエスケープ処理ですが
実は、他にもいろいろエスケープしていた事を知ることが出来ました。

普段何気なく使っている関数に、実は思わぬ実装がされているかもしれませんので、
ふっと結果を調べてみたりソースを覗いてみると、新たな発見があるかもしれません。


# おまけ宣伝
今回、セキュリティの話を書きましたが、セキュリティのLT会を2025年1月23日に企画しています。
ご興味があれば是非、遊びに来てくださいｗ
[Security.any #02 セキュリティあの頃はLT](https://security-any.connpass.com/event/336993/)