PHP中避免转义字符:第三方字符串编解码后保持原样方案
解决方法
因为无法修改原字符串,要让urldecode()后的结果保留原字符串中的\u003d转义序列(即呈现为\\u003d),可以在urldecode()之后对结果做针对性替换:
- 先正常执行
urlencode()和urldecode()流程 - 用正则匹配字符串中的
\u序列,将其替换为\\u,确保反斜杠被转义,避免后续被解析为Unicode字符
示例代码:
// 第三方提供的原字符串 $body = 'this is data \u003d\ this is data'; // 执行urlencode编码 $encodedStr = urlencode($body); // 执行urldecode解码 $decodedStr = urldecode($encodedStr); // 替换\u为\\u,保留其他反斜杠格式 $finalResult = preg_replace('/\\\\u/', '\\\\\\\\u', $decodedStr); // 输出结果:this is data \\u003d\ this is data echo $finalResult;
原理说明:
正则表达式/\\\\u/用于匹配字符串中的\u(正则里反斜杠需要双重转义),替换为\\\\\\\\u后,最终字符串里会生成\\u,这样既保留了原序列的字面意义,又不会被当作Unicode转义解析。
内容的提问来源于stack exchange,提问作者Muhammad Arslan Jamshaid
相关产品推荐
相关产品推荐

