← 全部工具

数据不出浏览器

HTML 编码 / 解码(在线)

免费 HTML encoder / decoder。把 < > & " 等字符转成实体,或还原实体。

转义输出又不把它弄坏

HTML 转义的目的是阻止输入被当成标记解析。如果值未经转义就进入页面,一个尖括号会闭合元素、一个引号会结束属性——大多数跨站脚本漏洞正是从这里开始的。

真正需要处理的只有五个字符:&、<、> 以及两种引号。多转义无害但更难读,而「二次转义」是最常见的失败:被转义两遍的实体会原样显示成实体文本,因为第二次转义的是一个本来已经安全的字符串。

按写入位置选择转义方式。标签之间的文本、属性值、JavaScript 字符串三者处理方式不同,而 HTML 实体在 <script> 里根本不够用——那里解析器已经离开 HTML 语境了。请只在输出点转义一次,而不是把转义后的值存起来。

常见问题

为什么要 HTML encode?
在页面中显示原始标签或特殊字符时,需要转义以免被当成标记。
和 URL encode 一样吗?
不一样。HTML 实体用于文档内容;URL 编码用于地址。
会上传内容吗?
不会。本地处理。
HTML 转义和 URL 转义有什么区别?
它们服务于不同的解析器。HTML 转义替换的是会结束标签或属性的字符,URL 转义替换的是 URL 里不允许的字符。把其中一种用到另一种该在的地方,结果看起来像转义过了,到了目标环境依然是错的。
为什么页面显示的是实体文本而不是字符?
说明被转义了两次。第一次把 & 变成实体,第二次又把这个实体里的 & 转义掉了,于是浏览器把实体当成普通文本显示。正确做法是只在输出时转义一次,存储时保留原始值。
纯文本里需要转义引号吗?
标签之间的文本里不需要,引号就是普通字符。但属性值里必须转义,因为解析器并不关心它和开启属性的那个引号是否同一个。两种引号统一都转义,就不用每次去记当前处于哪种语境。

相关工具