为什么express.js中的重音字母不能正确解释?

我有以下问题在expression式中,我得到一个string中包含以下字符'aeio u'的string,正确解释string,但添加带有口音的百分号('%áéíóú')字母问号(' '),有什么想法?

这是我的-package.json-: https : //gist.github.com/ripper2hl/f05fd6de3b2b218e6d17

这是-index.js-收据请求的地址: https ://gist.github.com/ripper2hl/ae6533e14078bc9b0119

iojs v2.2.1 在这里输入图像描述

在你的示例项目中,你告诉body-parser不要使用扩展查询stringparsing器( 这里 )。

这将使得它使用内置querystring模块来parsing查询string,这比用作扩展parsing器( qs )的查询string不那么健壮。

你可以看到这两个parsing器与这个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: '% á é í ó ú' } 

最终,它归结为您的input,这是在URL编码方面无效:

  • %有特殊的含义(作为转义字符)
  • 空格应该被编码
  • 非ASCII字符应该被编码

有效的input数据如下所示:

 data=%25%20%C3%A1%20%C3%A9%20%C3%AD%20%C3%B3%20%C3%BA