stripslashes()用于还原被addslashes()或magic_quotes_gpc自动转义的字符串,适用表单展示、JSON解析、路径处理等场景;PHP 5.4+未手动转义时禁用,不应用于安全防护,处理数组需递归封装。

当 PHP 接收到已被自动转义的字符串(比如来自旧版 magic_quotes_gpc 开启时的表单数据、或被 addslashes() 处理过的数据),而你又需要还原原始内容用于显示、解析 JSON、生成路径等场景时,就要用 stripslashes()。
主要适用场景
● 表单提交内容含单引号、双引号等,且服务端曾被 magic_quotes_gpc 自动转义(PHP 5.4 以前)——此时直接输出会多出 ,需先去除再展示。
● 从数据库读取的数据,是之前用 addslashes() 转义后存入的,现在要原样显示或进一步处理(如拼接 HTML、写入文件),就得去掉反斜杠。
● 接收 JSON 字符串(例如 POST 的 raw body 或 AJAX 提交的 JSON),若其中的引号被额外转义成 " 或 ',会导致 json_decode() 失败,这时先调用 stripslashes() 可恢复合法 JSON 格式。
● 处理用户输入的路径、正则表达式片段、SQL 片段等对反斜杠敏感的内容,而该内容已被双重转义(如 W:\ac3\about 变成 W:\\ac3\\about),需清理为单层反斜杠。
不建议使用的情况
● PHP 5.4+ 环境(magic_quotes_gpc 已彻底移除),且你没手动调用 addslashes() —— 此时用 stripslashes() 可能误删用户本意输入的反斜杠(如 Windows 路径 C: empile.txt 会被变成 C:tempfile.txt)。
● 数据将直接用于数据库查询(尤其未使用预处理语句时)——不应依赖 stripslashes() 来“修复”安全问题,而应统一用 PDO/MySQLi 预处理或 mysqli_real_escape_string()。
● 输入已通过 json_decode($input, true) 成功解析 —— 说明 JSON 本身无转义问题,无需再调 stripslashes()。
处理数组时要注意
stripslashes() 本身只作用于字符串,不能直接处理数组。如果要清理整个 $_POST 或 $_GET:
● 可用递归函数封装,例如:
<?php
function stripslashes_deep($value) {
return is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
}
$_POST = stripslashes_deep($_POST);
?>
● 更现代的做法是:确认 magic_quotes_gpc 已关闭(PHP ≥ 5.4 默认如此),改用过滤器(如 filter_input())或框架自带的请求净化机制,避免手动干预转义逻辑。
本质上,stripslashes() 是一个“还原工具”,不是安全函数,它的使用前提是明确知道反斜杠是哪一层加上的、是否应该被去掉。



















