【发布时间】:2012-05-01 04:49:41
【问题描述】:
我正在使用 .NET 4.5,我正在尝试将 URI 查询字符串解析为 NameValueCollection。正确的方法似乎是使用HttpUtility.ParseQueryString(string query),它采用从Uri.Query 获得的字符串并返回NameValueCollection。 Uri.Query 返回一个根据 RFC 2396 转义的字符串,HttpUtility.ParseQueryString(string query) 需要一个 URL 编码的字符串。假设 RFC 2396 和 URL 编码是一回事,这应该可以正常工作。
但是,the documentation for ParseQueryString 声称它“使用 UTF8 格式来解析查询字符串”。还有一个重载方法采用System.Text.Encoding,然后使用它而不是UTF8。
我的问题是:使用 UTF8 作为编码意味着什么? 输入是 string,根据定义(在 C# 中)是 UTF-16。那如何解释为 UTF-8?在这种情况下,使用 UTF8 和 UTF16 作为编码有什么区别?我担心的是,由于我接受任意用户输入,如果我搞砸了编码,可能会带来一些安全风险(即用户可能会通过一些脚本漏洞利用)。
关于这个主题有一个先前的问题 (How to parse a query string into a NameValueCollection in .NET),但它没有专门解决编码问题。
【问题讨论】:
标签: c#