HTML 实体编码
HTML Entity Encoder
转义和还原 HTML 实体,输出可选实体名、十进制或十六进制写法。
把字符转成 HTML 实体再转回来——`&`、`&`、`&`——转义多少可选。解码时还会应用 HTML 解析规范要求的 Windows-1252 重映射,所以 `’` 回来的是弯撇号而不是控制字符。
只有 `&`、`<` 和 `>`。放在两个标签之间需要的就这些,多一个也没有。
文本
编码后的值
XML 定义的那五个
| 字符 | 实体名 | 十进制 | 十六进制 |
|---|---|---|---|
| & | & | & | & |
| < | < | < | < |
| > | > | > | > |
| " | " | " | " |
| ' | ' | ' | ' |
不带 DTD 的话,XML 就只有这五个实体名。XML 文档里其余的都必须写成数字引用。
怎么用
决定转义多少
「文本内容」只转义 `&`、`<` 和 `>`——放在两个标签之间需要的全部。「属性值」再加上两种引号。「所有非 ASCII」是给无法承载 UTF-8 的管道用的,中文文本会膨胀到七倍左右。
选写法
命名式(`&`)最好读;十进制和十六进制是数字式,在 XML 里也能用——没有 DTD 的 XML 只有五个命名引用。
或者走另一个方向
切到「反转义」,粘贴满是实体的文本。表里不认识的实体会列出来并原样保留,而不是被丢掉。
常见问题
为什么我的某个实体被原样留着?
HTML5 定义了 2231 个命名引用,这里的表只收录一个精选子集——全部 Latin-1 字符、标点、希腊字母、箭头和常用数学符号。不在其中的会在一条说明里按名字列出,而不是悄悄丢掉,这是诚实的失败方式。
转义实体能防 XSS 吗?
对文本内容和带引号的属性值,这是正确的转义;在其他任何地方都不够——`<script>` 块内部、`javascript:` URL、不带引号的属性、CSS 上下文,实体转义在这些地方不起任何有用的作用。转义必须和它落地的上下文匹配。
为什么 `’` 解码成撇号?
因为 HTML 解析规范规定,数字引用里 0x80–0x9F 这段码点要重映射为 Windows-1252 在那些位置上的字符。按字面解码会得到不可见的 C1 控制字符,一个天真的解码器处理从 Word 粘来的文本时得到的就是这个。
我能在 XML 里用 ` ` 吗?
没有声明它的 DTD 就不能。XML 恰好有五个预定义的命名引用——`&` `<` `>` `"` `'`——页面底部的表列出了它们。其他一切都必须用数字式。
可以从这些接进来
HTML 美化与压缩
HTML Beautifier & Minifier
格式化或压缩 HTML,保留内联元素,是否折叠空白可选。
URL 编码解码
URL Encoder & Decoder
对 URL 和查询参数做百分号编解码,可选整条 URL 或单个组成部分两种模式。
字符串转义
String Escaper
按 JSON、JavaScript、SQL、shell、CSV 和正则各自的规则转义字符串,也能反转义回去。
JSON 格式化与校验
JSON Formatter & Validator
把 JSON 美化成缩进形式或压成一行,校验语法并直接指出出错的行和列。
接下来
这些工具吃得下当前工具的产出,结果可以直接送过去。
HTML 美化与压缩
HTML Beautifier & Minifier
格式化或压缩 HTML,保留内联元素,是否折叠空白可选。
字符串转义
String Escaper
按 JSON、JavaScript、SQL、shell、CSV 和正则各自的规则转义字符串,也能反转义回去。
Unicode 字符解析
Unicode Inspector
把文本拆成一个个码位,列出名称、区块、书写系统和 UTF-8/UTF-16 字节序列。
URL 编码解码
URL Encoder & Decoder
对 URL 和查询参数做百分号编解码,可选整条 URL 或单个组成部分两种模式。
Base64 编码解码
Base64 Encoder & Decoder
对文本和文件做 Base64 与 Base64URL 编解码,UTF-8 处理正确。
curl 转代码
curl to Code
把一条 curl 命令转成 fetch、axios、Python requests、Go、PHP 或 PowerShell 代码。