如何处理包含非utf8字符的GET参数?

在基于nodejs / express的应用程序中,我需要处理GET请求,其中可能包含使用iso-8859-1字符集编码的变音符号。

不幸的是,它的querystring解析器似乎只能处理纯ASCII和UTF8:

> qs.parse('foo=bar&xyz=foo%20bar')

{ foo: 'bar', xyz: 'foo bar' } # works fine

> qs.parse('foo=bar&xyz=T%FCt%20T%FCt')

{ foo: 'bar', xyz: 'T%FCt%20T%FCt' } # iso-8859-1 breaks, should be "Tüt Tüt"

> qs.parse('foo=bar&xyz=m%C3%B6p')

{ foo: 'bar', xyz: 'möp' } # utf8 works fine

是否有隐藏的选项或其他干净的方法也可以与其他字符集一起使用?默认行为的主要问题是,我没有办法知道是否存在解码错误-毕竟,输入 本来可以

只是简单地解码为仍然看起来像urlencoded字符串的东西。

回答:

好的URL编码应该始终使用UTF-8,其他情况可以视为编码攻击,只是拒绝请求。没有非utf8字符。我不知道为什么您的应用程序可以获取任何编码的查询字符串,但是如果您仅在页面上使用字符集标头,那么使用浏览器就可以了。对于API请求或其他请求,您可以指定UTF-8并将无效的UTF-8拒绝为Bad

Request。

如果您真的是说ISO-8859-1,那么这非常简单,因为字节与unicode代码点完全匹配。

'T%FCt%20T%FCt'.replace( /%([a-f0-9]{2})/gi, function( f, m1 ) {

return String.fromCharCode(parseInt(m1, 16));

});

虽然它可能永远不会是Web上的ISO-8859-1,但实际上是Windows-1252。

以上是 如何处理包含非utf8字符的GET参数? 的全部内容, 来源链接: utcz.com/qa/411121.html

回到顶部