HTML特殊字符编码对照表(含实体名称与十进制编码)

发布时间:2026/7/13 12:19:17
HTML特殊字符编码对照表(含实体名称与十进制编码) 1. HTML特殊字符编码入门指南刚接触HTML开发时我经常遇到这样的问题为什么网页上显示不出版权符号©为什么代码里的小于号会让整个页面布局错乱后来才发现这些都是因为没有正确处理HTML特殊字符。HTML特殊字符编码就像网页世界的摩斯密码用特定的符号组合来表示键盘无法直接输入的字符。最常见的两种编码方式是实体名称Entity Name和十进制编码Decimal Code。比如版权符号可以写成copy;实体名称或#169;十进制编码。这两种写法在浏览器中都会显示为©。我在早期项目里曾经因为混淆这两种写法导致网页显示一堆乱码调试了半天才发现是漏写了结尾的分号。2. 实体名称与十进制编码详解2.1 实体名称的工作原理实体名称以开头以;结尾中间使用英文单词表示特定字符。比如lt;表示小于号gt;表示大于号。这种写法的优点是直观易记就像给字符起了个别名。我在处理数学公式时特别喜欢用pi;来表示π比记数字编码方便多了。但实体名称有个限制不是所有字符都有对应的实体名称。目前HTML标准定义了大约250个有名称的实体主要包含以下几类希腊字母如alpha;、beta;数学符号如sum;、infin;标点符号如quot;、apos;特殊符号如copy;、reg;2.2 十进制编码的全面覆盖十进制编码采用#数字;的格式可以表示任何Unicode字符。比如#65;表示大写字母A#128512;表示表情。我在多语言网站开发时十进制编码简直是救命稻草——它能完美支持中文、日文、阿拉伯文等各种文字。与实体名称相比十进制编码有两大优势全覆盖性可以表示所有Unicode字符一致性不需要记忆不同名称直接使用Unicode编号不过实际开发中对于常见符号我还是推荐优先使用实体名称。比如copy;比#169;更易读团队协作时代码可维护性更高。3. 必须编码的5类危险字符有些字符在HTML中具有特殊含义必须进行编码否则会导致页面解析错误甚至安全漏洞。根据OWASP规范以下5类字符必须编码字符编码必要性示例场景推荐编码方式 必须编码标签边界lt;gt;必须编码实体开头amp; 属性值中必须属性值quot;apos;控制字符必须编码文本处理十进制编码高位Unicode视情况编码多语言支持十进制编码我在处理用户输入时一定会对这些字符进行编码处理。曾经有个项目因为未过滤用户输入的小于号导致XSS漏洞被安全团队打回重做教训深刻。4. 完整编码对照表与使用场景4.1 常用符号速查表下面是我整理的开发中最常用的20个字符编码建议收藏显示实体名称十进制用途说明lt;#60;避免标签冲突gt;#62;避免标签冲突amp;#38;避免实体冲突quot;#34;属性值引号©copy;#169;版权声明®reg;#174;注册商标°deg;#176;温度单位±plusmn;#177;误差范围×times;#215;数学乘号÷divide;#247;数学除号4.2 特殊场景编码指南数学公式场景推荐使用实体名称如sum;表示∑int;表示∫。我在开发在线教育平台时这种方式让公式可读性大幅提升。多语言支持必须使用十进制编码。比如中文你好可以表示为#20320;#22909;。但要注意现代IDE通常能自动处理多语言字符除非在特殊环境下如JSON传输否则不必强制编码。表情符号统一使用十进制编码。例如笑脸是#128522;。我在移动端网页中经常用这种方式增加交互趣味性。5. 实际开发中的编码策略5.1 自动编码工具推荐现代前端框架如React、Vue大多内置了自动编码机制但了解底层原理仍然重要。以下是我常用的编码/解码方法// 浏览器环境自带的编码方法 function encodeHTML(str) { return str.replace(/[]/g, tag ({ : amp;, : lt;, : gt;, : apos;, : quot; }[tag])); } // 使用第三方库如he.js处理更复杂场景 import he from he; he.encode(© 2023); // copy; 20235.2 性能优化建议静态内容在构建阶段预编码如Webpack的html-loader动态内容在渲染前即时编码混合内容对确定的HTML片段使用dangerouslySetInnerHTMLReact或v-htmlVue时要特别小心我在处理富文本编辑器内容时会采用分层编码策略先对危险字符编码再允许安全的HTML标签通过白名单过滤。6. 安全防护与疑难解答6.1 XSS防护实战未编码的特殊字符是XSS攻击的主要入口。这是我的防御方案对所有不可信数据强制编码使用CSP内容安全策略作为最后防线定期使用OWASP ZAP等工具扫描漏洞!-- 错误示范 -- div{{userInput}}/div !-- 正确做法 -- div{{encodeHTML(userInput)}}/div6.2 常见问题排查乱码问题检查是否漏写分号如copy错误vscopy;正确双重编码避免连续编码如amp;amp;会显示为amp;编码冲突在HTML属性中使用JSON时要先编码JSON再嵌入HTML记得有一次我在处理API返回数据时因为多层编码导致显示异常最后用he.decode()配合正确的编码顺序才解决问题。