我在express中有以下问题,我在包含以下字符的post请求中得到一个字符串 'a e i o u',字符串被正确解释,但添加带符号的百分号('%áéíóú')字母成为问号(' '),是否有任何想法?
这是我的-package.json-:https://gist.github.com/ripper2hl/f05fd6de3b2b218e6d17
这是-index.js-收据请求的地方:https://gist.github.com/ripper2hl/ae6533e14078bc9b0119
答案 0 :(得分:1)
在您的示例项目中,您告诉body-parser
不要使用扩展查询字符串解析器(here)。
这将使它使用内置的querystring
模块来解析查询字符串,这不如用作扩展解析器(qs
)的健壮。
您可以通过此PoC查看这两个解析器之间的差异:
var querystring = require('querystring');
var qs = require('qs');
var input = 'data=% á é í ó ú';
console.log('querystring:', querystring.parse(input) );
console.log('qs :', qs.parse(input) );
输出再现您所看到的内容:
querystring: { data: '% � � � � �' }
qs : { data: '% á é í ó ú' }
最终,它归结为您的输入,这在URL编码方面无效:
%
具有特殊含义(作为转义字符)有效输入数据如下所示:
data=%25%20%C3%A1%20%C3%A9%20%C3%AD%20%C3%B3%20%C3%BA