Node.js获取查询参数特殊字符问题:+号变空格如何解决
解决Express.js中获取带+号的Query参数问题
问题核心是:URL里的+号会被HTTP协议默认解析为空格,所以前端传的+91到后端就变成了 91。下面给两种可行的解决办法:
方法一:直接替换空格为+
如果后端拿到的参数已经是带空格的,直接把空格替换回+就行,代码示例:
const countryCode = req.query.countryCode.replace(/\s/g, '+');
这种方式简单直接,适合只处理单个参数的场景。
方法二:重新解析原始查询字符串
如果需要全局处理所有带+的参数,可以用Node.js内置的querystring模块,自定义解析规则,避免+被转成空格:
const querystring = require('querystring'); // 从请求的原始URL中提取查询部分 const queryStr = req.originalUrl.split('?')[1]; // 自定义解码逻辑,先把+转成%2B再解码 const parsedQuery = querystring.parse(queryStr, null, null, { decodeURIComponent: (str) => decodeURIComponent(str.replace(/\+/g, '%2B')) }); const countryCode = parsedQuery.countryCode;
额外建议
如果能修改前端代码,最好在发送请求前对countryCode参数做URL编码,把+转成%2B,这样后端直接用req.query.countryCode就能拿到正确值,这是更规范的做法。
内容的提问来源于stack exchange,提问作者Salini L
相关产品推荐
相关产品推荐

