toolfree

HTML 字元编码

在浏览器里转义 HTML 特殊字元,可以选择只转 HTML 必需的最小集合,或全部数值化。

在你的浏览器中运行

第一个几乎永远是对的。最后一个会把中文内容膨胀好几倍,只有旧系统才需要。

结果

还没有东西可以转换。

真正重要的只有五个字元,其余都是偏好

只有五个字元会改变浏览器解析 HTML 的方式:&<>"'。把这五个转义掉,就是 「让文字不会被当成标记读取」的全部,也是这个操作中唯一跟安全有关的部分。

其他所有东西——©£、中文、emoji——在一份 UTF-8 文件里都只是普通文字,完全不需要 转义。所以**「只转 HTML 必须转的」几乎永远是对的**,它也是默认值。

另外两个选项有其真实但狭窄的用途:

顺序有意义,这就是 & 要先转的原因

& 必须第一个被转义。如果它排在最后,< 会先变成 &lt;,接着那个 & 又会被转一次变成 &amp;lt;,显示出来就是字面上的 &lt; 而不是一个小于符号。

转义不是幂等的,也不该是。跑两次本来就会得到不同的结果——这正是为什么你应该在输出的那一刻 转义一次,而不是把转义过的文字存进数据库。

解码三种写法都吃

&nbsp;&#160;&#xA0; 是同一个字元的三种写法,解码器三种都接受,也包括旧标记里会 出现的大写 &#X 变体。

任何它不认得的东西都会原封不动留着。R&D 还是 R&D,不会被弄乱,因为一个后面没有接合法 实体的 &,就只是一个 & 而已。

有两种情况是刻意拒绝的:指向单一代理码位的escape(&#xD800;),以及超出 Unicode 范围的escape。 两者都不是字元,硬要生出一个只会让输出坏掉。

这不是消毒

转义让文字可以安全地显示,但不会让不受信任的 HTML 可以安全地嵌入——那需要一个懂得 标签与属性的消毒工具。如果你要把使用者送出的标记贴进页面里,这不是你要的工具。

没有任何上传

全部都在这个页面里执行。