# 字符串转义与反转义

为 JSON 或 JavaScript 字符串、SQL 字符串、CSV 字段、正则表达式或 shell 单词转义文本，或撤销转义。

https://codeknife.dev/zh/zhuanyi/

## 功能

转义文本，使其可以放进 JSON 或 JavaScript 字符串、SQL 字符串、CSV 字段、正则表达式或 shell 单词中，并可撤销转义。每种格式只转义它所需的字符，不多也不少。

## 使用方法

1. 输入或粘贴文本，或拖入文本文件。
2. 选择文本的去向（**JSON 字符串**、**JavaScript 字符串**、**SQL 字符串**、**CSV 字段**、**正则表达式**或 **Shell 单词**），以及**转义**还是**反转义**。
3. 复制或下载结果，或用**将输出作为输入**把它变成下一次输入。

## 示例

转义 `He said "it's fine"` 和一个换行：

JSON 得到 `He said \"it's fine\"\n`，SQL 得到 `He said "it''s fine"`，shell 得到 `'He said "it'\''s fine"'`。

## 须知

- JSON 和 JavaScript 转义反斜杠、包围字符串的引号、换行和控制字符。反转义会读取 `\n`、`\t`、`\uXXXX` 等；JavaScript 还会读取 `\xHH` 和 `\u{…}`。
- SQL 把单引号写两次。这对手写的字面量是对的；对于代码，请使用绑定参数。
- CSV 字段只有在包含逗号、引号或换行时才用引号包起来，里面的引号会写两次。
- shell 单词用单引号包起来，其中的单引号写成 `'\''`，使其中的内容都不被展开。

## 为什么每种格式的转义方式不同？

每种语法都有自己的特殊字符。JSON 字符串需要转义引号、反斜杠和控制字符。SQL 字符串只需要把单引号写两次。CSV 字段包含逗号、引号或换行时要用引号包起来。正则表达式转义它的运算符，shell 单词用单引号包起来，使其中的内容都不被展开。

## 常见问题

### 转义足以阻止 SQL 注入吗？

不能。把引号写两次是本工具展示的做法，对手写查询中的字面量是对的，但不是代码的防御手段。请把值作为绑定参数传入，使它们永远不是 SQL 文本的一部分。

### JSON 字符串和 JavaScript 字符串有什么区别？

JSON 只允许少数几种转义，并且总是使用双引号。JavaScript 还允许单引号、\x41，以及两种引号风格下的转义。因此按 JSON 反转义会拒绝 JavaScript 能接受的序列。

### 这个工具会把我的文本发送到别处吗？

不会。一切都在你的浏览器中进行。你输入的内容不会发送到我们的服务器。