# html-escaper 中文文档

规范地址：https://npmcn.com/package/html-escaper/

版本：3\.0\.3
npm 元数据更新时间：2022-06-18T21:52:34.448Z
中文译文更新时间：2026-11-05T15:20:20.633Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/html-escaper
原文对照：https://npmcn.com/package/html-escaper/?lang=original
项目主页：https://github.com/WebReflection/html-escaper
源码仓库：https://github.com/WebReflection/html-escaper

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：15.6 kB，10 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2015-04-08T09:55:12.173Z
- 最新版本发布：2021-02-18T08:35:19.586Z
- 近 30 天下载量：355511330（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 0 个）

## 中文简介

快速而安全地逃脱 并脱逃的chars

## 安装

```sh
npm install html-escaper
```

也可以使用：`pnpm add html-escaper`、`yarn add html-escaper`、`bun add html-escaper`

## README

# html- 隐藏器

[![Downloads](https://img.shields.io/npm/dm/html-escaper.svg)](https://www.npmjs.com/package/html-escaper) [![Build Status](https://travis-ci.org/WebReflection/html-escaper.svg?branch=master)](https://travis-ci.org/WebReflection/html-escaper) [![Coverage Status](https://coveralls.io/repos/github/WebReflection/html-escaper/badge.svg?branch=master)](https://coveralls.io/github/WebReflection/html-escaper?branch=master) ![WebReflection status](https://offline.report/status/webreflection.svg)

一个简单的模块,用来逃脱/逃脱常见的问题实体.

#### 随便你!

如果你想处理 任何类型的输入,包括 `null` 或者说 `undefined`,甚至 `symbol` 类型, 请检查 [html- sloppy- scapper 软件](https://www.npmjs.com/package/html-sloppy-escaper) 出局:这是同一个模块,但是它从不扔出错误 qq

## V3 仅限释放

此模块的 第 3 版 完全抛弃了遗留的浏览器和 _节点_ 有破损装载器,例如 `v13.0.0` 财务报告和审定财务报表 `v13.1.0`。 。 。 .

由于代码基本相同,只要坚持第二版 如果你对这个有什么意见... ..

### 怎么样

此软件包可用 npm 所以 `npm install html-escaper` 这是你要做的, 最终使用全球旗帜.

一旦模块出现

```js
import {escape, unescape} from 'html-escaper';

escape('string');
unescape('escaped string');
```

### 为什么

基本上只有一个规则: **永远** 如果您正在将字符串转换为另一个字符, 则替换一个又一个字符.

```js
// WARNING: THIS IS WRONG
// if you are that kind of dev that does this
function escape(s) {
  return s.replace(/&/g, "&amp;")
          .replace(/</g, "&lt;")
          .replace(/>/g, "&gt;")
          .replace(/'/g, "&#39;")
          .replace(/"/g, "&quot;");
}

// you might be the same dev that does this too
function unescape(s) {
  return s.replace(/&amp;/g, "&")
          .replace(/&lt;/g, "<")
          .replace(/&gt;/g, ">")
          .replace(/&#39;/g, "'")
          .replace(/&quot;/g, '"');
}

// guess what we have here ?
unescape('&amp;lt;');

// now guess this XSS too ...
unescape('&amp;lt;script&amp;gt;alert("yo")&amp;lt;/script&amp;gt;');


```

最后一个例子将产生 `<script>alert("yo")</script>` 而不是预期 `&lt;script&gt;alert("yo")&lt;/script&gt;`。 。 。 .

如果我们一次抓住所有的花花公子,不管怎样,都不可能发生这种事. 交换之后的幸运情况 `&` 与 `&amp;` 没有其他替代品会受到影响, 但这不是可移植和普遍不良的做法.

立刻抓住所有的魅力,别找借口!

**更多细节** 可能有人认为是 `unescape` 只有问题,它不是。 作为具有副作用的反战者,双管齐下.

例如,改变替换者逃跑的顺序会产生出乎意料的情况:

```js
function escape(s) {
  return s.replace(/</g, "&lt;")
          .replace(/>/g, "&gt;")
          .replace(/'/g, "&#39;")
          .replace(/"/g, "&quot;")
          .replace(/&/g, "&amp;");
}

escape('<'); // &amp;lt; instead of &lt;
```

如果我们不想用担心命令不完美或者我们逃出或逃出的命令与使用的另一种方法或功能的顺序不同来编码,如果我们理解这个问题,并且我们同意这是一个可能发生灾难的方法,如果我们在本案中添加事实,每次创建4个RegExp对象,并引用4次的话 `.replace` 通过 `String.prototype` 也有可能比创建一个仅持有一个对象的函数,或者也拥有该函数慢,我们应当同意,没有任何绝对合理的理由继续提出逐个执行.

我们有证据可以证明这个方法已经失败了 所以... 我们为什么要冒险? 立即避开并抓取所有字符 或只是使用这个小小的工具.

### 反键

实习探险家 < 9 有 [一些后退问题](https://html5sec.org/#102)

为了与普通服务器-侧HTML实体的编码器和解码器兼容,为了拥有最可靠的I/O,这个小功能不会解决这个IE < 9问题.

还必须指出的是,如果我们创建有效的HTML,并且我们通过这个工具在运行时设置属性,字符串中的回击不可能影响属性行为.

```js
var img = new Image();
img.src = html.escape(
  'x` `<script>alert(1)</script>"` `'
);
// it won't cause problems even in IE < 9
```

**不过**,如果使用 `innerHTML` 然后瞄准 IE < 9 [这个 **可能会** 是个问题](https://github.com/nette/nette/issues/1496)。 。 。 .

因此,如果你需要更多的字符和(或)回击才能逃脱和逃脱,可以自由地使用替代品,例如: [摇篮](https://github.com/lodash/lodash) 或者说 [他的电话](https://www.npmjs.com/package/he)

再来一点 [我的邮箱](https://github.com/WebReflection/html-escaper/commit/52d554fc6e8583b6ffdd357967cf71962fc07cf6#commitcomment-10625122) 和为什么我没有 执行同样的事情 替代品做了。 好消息:这些都是替代办法;-)

## 常见问题

### html-escaper 是什么？

快速而安全地逃脱 并脱逃的chars

### 如何安装 html-escaper？

在项目目录运行 npm install html-escaper，或使用 pnpm add / yarn add / bun add。

### html-escaper 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/html-escaper 是否存在。

### html-escaper 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### html-escaper 可以商用吗？

html-escaper 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### html-escaper 的下载量有多少？

根据 npm 官方下载统计，html-escaper 在 2026/10/05 – 2026/11/03 这 30 天内被下载 355,511,330 次，日均约 11,850,378 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### html-escaper 还在维护吗？

最新版本 3\.0\.3 发布于 2021/02/18（5 年前）；至今共发布 9 个版本，其中过去 12 个月发布了 0 个；首次发布于 2015/04/08。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

