首页文本与开发 › HTML 实体编码解码

HTML 实体编码解码

把文本中的尖括号、引号、和号转成 HTML 实体,或把实体还原成原文,支持常用命名实体与数字实体。

哪些字符必须转义

HTML 用尖括号标记标签、用和号开始实体,所以正文里出现这些字符时必须转义,否则浏览器会当成标记来解析,轻则排版错乱,重则被注入脚本。必须处理的有五个:和号写成 &、小于号写成 <、大于号写成 >、双引号写成 "、单引号写成 '。其中引号只在放进标签属性里时才必须转义,但统一处理更安全。还要注意顺序:编码时一定先替换和号再替换其他字符,否则先生成的实体里的和号会被二次编码,页面上就会直接显示出实体本身的文字。

实体有两种写法。命名实体如不间断空格、版权号、破折号,可读性好,但不同 HTML 版本支持的名字不同,XML 里只有五个基本实体可用。数字实体更通用:十进制写成井号加码点,十六进制在井号后加 x,任何 Unicode 码点都能这样写。本工具编码非 ASCII 字符时采用十六进制形式,并正确处理了 emoji 这类需要代理对表示的字符。

常见用途与注意事项

最常见的用途是防止跨站脚本攻击:把用户提交的内容原样拼进页面前必须转义,否则对方输入一段脚本标签就能在别人的浏览器里执行。不过转义要看位置,放进标签属性、网址参数、JavaScript 字符串或样式表里各有各的规则,只做 HTML 实体转义并不够;现代前端框架通常默认转义,只有在使用类似 innerHTML 的接口时才需要自己处理。

第二个用途是排版。不间断空格让两侧内容不会在此断行,常用于日期、单位和数字之间,但连续用它撑排版是坏习惯,间距应当交给样式表。全角空格是一个汉字宽,中文段落缩进可以用它,不过更推荐用首行缩进属性。此外从网页复制来的文本里常混入码点 160 的不间断空格而不是普通空格,肉眼看不出差别,却会导致查找替换失败、正则匹配不到,用本工具解码后再比对就能发现。解码时遇到不认识的命名实体会原样保留并统计数量,方便定位问题。

常见问题

不间断空格和普通空格有什么区别?

不间断空格的码点是 160,浏览器不会在它这里换行,多个相邻时也不会被合并;普通空格会被合并且可以换行。

编码后的内容怎么用?

直接粘贴进 HTML 源码即可,浏览器渲染时会自动还原成原文,且不会把其中的标签当成标记解析。

为什么单引号编码成数字实体?

命名写法 apos 是 HTML5 和 XML 才有的,老版本 HTML 不认识。数字实体在所有环境里都能正确显示。

能防止 XSS 吗?

HTML 实体转义是防御的基础一步,但放进属性、网址、脚本或样式上下文时还需要各自的转义规则,应优先使用框架自带的安全渲染方式。