方法1:

前端调试: 使用 console.log 检查发送的数据内容:

后端调试: 在后端直接打印接收到的原始请求数据:

$rawData = file_get_contents(‘php://input’);
error_log($rawData);

对比前后数据是否一致。

方法2:

关键点分析

pplication/x-www-form-urlencoded 的转义行为

JSON 特殊字符被转义为 URL 编码形式,例如:

  • {%7B
  • }%7D
  • "%22

如果被多次转义,会出现嵌套的转义,例如:

  • "%22%2522(注意 %25% 的转义)。

判断是否多次转义

 

  • 判断是否包含 %%25 等编码特征。
  • 尝试解码字符串,看是否仍然是 JSON 格式。

1. 使用正则表达式检查是否包含 URL 编码

function isUrlEncoded($str) {
return preg_match(‘/%[0-9A-Fa-f]{2}/’, $str);
}

2. 检查是否是有效的 JSON

function isValidJson($str) {
json_decode($str);
return json_last_error() === JSON_ERROR_NONE;
}

function isMultiEncodedJson($str) {
// 先判断是否包含 URL 编码
if (!isUrlEncoded($str)) {
return false; // 没有 URL 编码,不可能多次转义
}

// 尝试解码一次
$decodedOnce = urldecode($str);

// 如果解码一次后是有效 JSON,说明是一次转义的 JSON
if (isValidJson($decodedOnce)) {
return false; // 一次转义
}

// 尝试解码两次
$decodedTwice = urldecode($decodedOnce);

// 如果解码两次后是有效 JSON,说明是多次转义的 JSON
return isValidJson($decodedTwice);
}

 

 

作者 admin

百度广告效果展示