PHP 7.4中$_GET获取参数时反斜杠重复问题求助
解决PHP 7.4中$_GET参数反斜杠被重复转义的问题
排查步骤
先确认参数的实际传递与处理情况,执行以下代码查看原始输入和$_GET的处理结果:
// 打印PHP处理后的参数 var_dump($_GET['name']); // 打印原始查询字符串,确认传递的是单个%5c var_dump($_SERVER['QUERY_STRING']);
可能的原因及解决方案
项目自定义转义逻辑:检查项目全局初始化文件(如
common.php、init.php),看是否存在手动对$_GET数组执行addslashes()、mysql_real_escape_string()等转义函数的遗留代码,这类代码会导致反斜杠被重复转义,直接移除相关逻辑即可。服务器安全模块自动转义:部分服务器的安全模块(如Apache的
mod_security)会自动对URL特殊字符做转义处理。可以临时关闭该模块测试,或在服务器配置中调整规则,允许反斜杠正常传递。绕过$_GET的自动处理:直接解析原始查询字符串,避免PHP自动转义的干扰:
$query = $_SERVER['QUERY_STRING']; parse_str($query, $getParams); // $getParams['name']即为未被额外转义的原始值 echo $getParams['name'];
- 手动还原转义:如果确认参数被额外添加了反斜杠,可使用
stripslashes()还原,注意仅针对确实被多转义的场景:
if (strpos($_GET['name'], '\\') !== false) { $_GET['name'] = stripslashes($_GET['name']); }
内容的提问来源于stack exchange,提问作者Dennis Bareis
相关产品推荐
相关产品推荐

