你需要将一个JSON字符串嵌入另一个JSON字符串 — 也许一个本身包含JSON有效负载的日志消息。或你正在编写包含带引号的字符串的shell命令。或你正在构建一个URL,必须将另一个URL作为查询参数携带。这些情况中的每一个都需要转义:将否则被解释为语法的字符转换为被视为字面数据的形式。
不同的上下文转义不同。JSON用反斜杠转义引号并将特殊字符表示为\\n代表换行符。Shell转义取决于你使用的引用风格。URL转义完全不同地百分比编码保留字符。混淆这些 — 在需要URL转义的地方应用JSON转义 — 生成看起来几乎对且以混乱方式失败的输出。
双转义问题
这个空间中最常见的错误之一是双转义:字符串被你的代码转义一次,然后再被假设它仍然原始的库或框架转义,将单个反斜杠变为两个并静默地破坏数据。诊断这需要逐步非转义来看到额外层被引入在哪里 — 特别是在长字符串中手工做很繁琐。
为多格式转义和非转义
Bellows在其41个开发工具中包括字符串转义工具,涵盖JSON、HTML和URL格式。粘贴原始字符串来看到它对给定上下文正确转义,或粘贴转义字符串来看原始值。
将字符串嵌入字符串中
构建自己包含JSON字符串作为字段值的JSON有效负载,或构建一个日志消息,需要安全地包括任意用户输入,都需要正确转义以避免破坏外部结构。
诊断双转义数据
当字符串看起来被转义的次数比它应该的更多时,逐层非转义显示额外编码被引入在哪里,通常是追踪负责代码的最快方式。