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

Express为何将&转为&amp%3B?该如何处理此问题?

解决Express中查询字符串amp;campaignId参数异常的问题

嘿,这个问题我之前也碰到过!其实这大概率不是Express的配置问题,而是查询字符串被双重编码搞出来的麻烦,咱们一步步拆解解决:

问题根源

你收到的请求链接里原本的&被转成了HTML实体&,之后这个实体又被做了URL编码,变成了&amp%3B。Express的查询解析器(默认用qs库)会把这个当成参数名的一部分,所以就出现了'amp;campaignId':'123456'这种异常参数。

解决步骤

1. 优先从请求源头修复(最推荐)

这种情况大多是前端生成URL时的问题:比如在HTML的href属性里直接写了&,或者前端JS拼接URL时错误地使用了HTML实体而非原始的&。

  • 正确的做法是:拼接查询参数时直接用原始的&,比如生成的URL应该是https://myserver.com/processCampaign?id=12345679&campaignId=123456,而不是带&的版本。

2. 后端中间件修复(如果无法修改请求源头)

如果是第三方请求或者没法改前端,咱们可以在Express里加一个前置中间件,手动修复编码后的查询字符串:

// 这个中间件要放在express.json()/express.urlencoded()之前
app.use((req, res, next) => {
  // 把被双重编码的&amp%3B替换回&
  req.url = req.url.replace(/&amp%3B/g, '&');
  // 或者更通用的处理:先解码URL,再替换HTML实体
  // req.url = decodeURIComponent(req.url).replace(/&/g, '&');
  next();
});

这样处理后,Express就能正常解析出id和campaignId两个参数了。

3. 检查Express查询解析配置(排查项)

Express默认用qs库解析查询字符串,默认配置是没问题的。如果你手动修改过query parser配置(比如设置了app.set('query parser', 'simple'),用Node原生querystring模块),可以改回默认的qs模式,不过这一般不是导致这个问题的原因。

总结

优先从请求生成的源头解决编码问题,确保传递的是原始的&分隔符;如果源头没法调整,用后端中间件修复编码后的URL即可解决这个参数解析异常的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:26