PHP字符串转义用于正确处理特殊字符,双引号解析\n\r\t\"\$等,单引号仅支持\和\';手动转义易出错,应优先使用json_encode()、htmlspecialchars()、预处理语句等安全函数。
PHP 中字符串里的转义,主要是为了让某些特殊字符(比如双引号、反斜杠、换行符等)能被正确识别或输出,而不是被当作普通文本或语法符号处理。
常见转义字符及用法
PHP 支持标准 C 风格的转义序列,主要在双引号字符串中生效(单引号里大部分不解析转义,仅支持 \\ 和 \'):
-
\n:换行符(LF)
-
\r:回车符(CR)
-
\t:制表符(Tab)
-
\":双引号(用于双引号字符串内嵌双引号)
-
\\:反斜杠本身
-
\$:美元符号(避免变量解析,如 "\$name" 不会替换成变量值)
单引号 vs 双引号中的转义差异
单引号字符串几乎不解析转义(只认 \\ 和 \'),而双引号会解析所有上述转义序列,还会解析变量(如 $
name):
"Hello\nWorld" → 输出两行
'Hello\nWorld' → 原样输出 \n 字符串
需要手动转义的场景
以下情况常需主动加反斜杠:
- 拼接 SQL 语句时防止注入(但更推荐用预处理,而非手动转义)
- 生成 JSON 字符串时确保引号不破坏结构(json_encode() 自动处理,无需手动)
- 写正则表达式时,匹配反斜杠、点、括号等元字符(如 /\\d+\\.\\d+/ 匹配 “123.45”)
- 路径字符串中避免 Windows 下的 \n、\t 被误解析(建议用正斜杠 / 或双反斜杠 \\)
安全替代方案优先于手动转义
手动加反斜杠容易出错且不安全,实际开发中应优先使用内置函数:
- 数据库操作:用 PDO/MySQLi 的预处理语句(prepare + bindParam)
- HTML 输出:用 htmlspecialchars($str, ENT_QUOTES, 'UTF-8')
- JSON:用 json_encode($data)(自动转义并保证格式合法)
- Shell 命令:用 escapeshellarg() 或 escapeshellcmd()
基本上就这些。转义不是越多越好,关键是理解在哪种上下文里哪些字符有特殊含义,再决定是否以及如何转义。