HTML 与 JS 字符串互转
网络所有处理都在浏览器本地完成,数据不上传服务器
输入
把文件拖到这里可直接载入
输出
一个方向是把 HTML 塞进 JS 里当字符串:换行、引号、反斜杠全部转义,还能包成 `const html = …` 或 `document.write(…)`。另一个方向反过来,把从代码里复制出来的转义字符串还原成人能看的 HTML。最要命的一处是 `</script>`:如果这段 JS 本身写在 `<script>` 标签里,字符串中出现的 `</script>` 会提前把标签闭合掉 —— 剩下的 HTML 变成页面上的文字,控制台还可能一片正常。所以这里默认把它打断成 `<\/`,而在 JS 字符串里这两者是同一个值,所以打断不改变结果。
功能
- 两个方向:HTML → JS 字符串、JS 字符串 → HTML
- 自动判断方向(以 < 开头当 HTML,以引号开头当 JS 字符串),也可手动指定
- 默认把 `</` 打断成 `<\/`,防止 `</script>` 提前闭合脚本标签
- 三种引号:单引号、双引号、反引号(反引号模式会额外转义 `${` 与反引号本身)
- 三种输出形态:纯字符串、`const html = …`、`document.write(…)`
- 换行、制表符、反斜杠、行分隔符 U+2028/U+2029 全部转义
- 反向解析支持 `\n` `\t` `\xHH` `\uHHHH` `\u{…}` 与行尾续行
- 不认识的转义原样保留(粘进来的可能是一段正则)
使用方法
- 粘贴 HTML 代码,或一段带引号的 JS 字符串
- 方向留「自动判断」,或手动指定
- 选引号与输出形态,结果实时更新
- 复制走结果 —— 它是能直接粘进代码的
常见问题
- 为什么要把 </ 改成 <\/?
- 因为 HTML 解析器在 `<script>` 标签里只找源码里有没有 `</script` 这个字符序列,不看它是不是在 JS 字符串里。所以一段内嵌的 HTML 只要包含 `</script>`,脚本标签就会在那里被提前闭合:剩下的 JS 变成页面上的文字,报错也不指向真正的原因。`\/` 在 JS 字符串里与 `/` 是同一个值,所以打断它不改变任何结果 —— 这是唯一一个「改源码、不改值」的办法。
- 选单引号还是双引号?
- 看内容。HTML 属性通常用双引号(`class="btn"`),所以把 HTML 放进单引号字符串里要转义的字符少得多,可读性也好;这是默认选单引号的原因。反引号(模板字符串)看着最干净,但代价是要额外转义 `${`(否则会被当成插值)与反引号本身。
- 自动判断方向是怎么判的?
- 只有一条判据:去掉空白后是不是以 `<` 开头 —— 那说明输入是标签。反过来「像不像一个转义过的 JS 字符串」太难判,任何文本都可能像,而猜错的后果是把你的正文当成代码去反转义(`\n` 两个字符变成真换行),改完还看不出哪里不对。所以只有一边能猜,另一种情况请手动指定。
- 为什么有些转义不被处理?
- 反向解析只处理 JS 里有明确定义的转义:`\n` `\t` `\b` `\f` `\v` `\0`、`\xHH`、`\uHHHH`、`\u{…}`、以及引号与反斜杠本身。不认识的(比如 `\d`、`\q`)原样保留反斜杠而不是丢掉 —— 你粘进来的可能是一段正则,丢掉反斜杠会让 `\d` 变成 `d`,而那是另一个意思。
相关工具
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
Unicode 转义
编码把中文、emoji 这类非 ASCII 字符转成 \uXXXX、\xXX 或 &#xXXXX; 的转义写法,也能还原回来。全部在浏览器本地完成,不上传。
cURL 工具箱(转代码 / 解析 / 构建)
网络粘贴 curl 命令转成七种语言的代码,或拆成方法、请求头与请求体的字段表;也能把一份 HTTP 请求反向构建成 curl 命令。
URL 解析
网络在线 URL 解析:拆出协议、主机、端口、路径、查询参数与锚点,参数逐个解码并与原始值对照,缺协议自动补 https://。全部在浏览器本地完成。
UA 解析
网络在线 User-Agent 解析:识别浏览器、版本、操作系统、设备类型与渲染引擎,并列出命中的匹配规则。结果基于模式匹配,仅供参考。全部在浏览器本地完成。
HTTP 状态码
网络HTTP 状态码查询与速查:输入编号查含义、1xx 到 5xx 分类、常见场景与排查提示,也能用关键词反查编号。全部在浏览器本地完成。