You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行JSON.parse遇<0X02>控制符报错,如何通过PHP filter_var修复?

问题根因
  1. JSON规范明确禁止未转义的ASCII低阶控制字符(ASCII值<0x20,包含你遇到的<0x02>文本起始符)直接出现在JSON字符串中,JS内置的JSON.parse()遇到这类未转义字符会直接抛出语法错误。
  2. 你当前的filter_var使用逻辑存在处理时机问题,同时你给出的示例JS代码中的字符串本身不符合JSON格式要求,缺少外层{}包裹,也会触发解析错误。
基于PHP filter_var的修复方案
  • 先对所有要放入JSON的输入字段单独执行过滤,不要在JSON生成后再做过滤,避免破坏JSON结构:
// 过滤单个字段,FILTER_FLAG_STRIP_LOW会移除所有ASCII值<32的控制字符,包括<0x02>
$filteredUserName = filter_var($inputUserName, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW);
$filteredTitle = filter_var($inputTitle, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW);

// 构造关联数组后使用PHP内置json_encode生成合法JSON,禁止手动拼接JSON字符串
$responseData = [
    'userName' => $filteredUserName,
    'title' => $filteredTitle
];

// 输出JSON时增加参数兜底转义特殊字符,进一步避免解析风险
echo json_encode($responseData, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
  • 如果你需要保留换行、制表符这类常用低阶控制符,可以替换为自定义过滤规则,仅移除你不需要的控制符(如<0x02>),其余控制符交给json_encode自动转义为JSON允许的\u00xx格式即可。
前端验证

过滤后生成的合法JSON传到前端后可直接解析:

// 示例:PHP输出的合法JSON字符串
const rawJson = '{"userName":"abcde","title":"xxx Offshore xxx"}';
const parsedData = JSON.parse(rawJson);
console.log(parsedData);

内容的提问来源于stack exchange,提问作者Sujit Jha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 03:57:05