解码使用 JS encodeURIComponent 函数编码的参数

Decode parameters encoded using the JS encodeURIComponent function

我有一个应用程序可以接收用户输入的文本并将其作为 URL 的一部分传递给服务器,以便可以呈现包含文本的图像。 URL 参数使用 encodeURIComponent 函数进行编码。

我遇到的问题是,如果用户输入包含 + 或外来字符的文本,我无法在服务器端正确解码字符串。

例如,如果字符串是 "François + Anna"

编码后的URL是previewImage.ashx?id=1&text=Fran%25E7ois%2520%2B%2520Anna

在服务器上

Uri.UnescapeDataString( Context.Request.QueryString["text"] )

抛出 "Invalid URI: There is an invalid sequence in the string." 异常。如果我从字符串中替换扩展字符,它将被解码为 "Francois + Anna"

但是,如果我使用

HttpUtility.UrlDecode(
    Context.Request.QueryString["text"], System.Text.UTF8Encoding.UTF7 )

外文解码正确,但编码后的+变成了space; "François   Anna".

URL 一开始就没有正确编码。 previewImage.ashx?id=1&text=Fran%25E7ois%2520%2B%2520Anna 不是 François + Anna

的正确 URL 编码

我认为正确的编码应该是 previewImage.ashx?id=1&text=Fran%E7ois+%2B+AnnapreviewImage.ashx?id=1&text=Fran%E7ois%20%2B%20Anna

编码固定后,您应该能够通过简单的 Context.Request.QueryString["text"] 调用检索结果。不需要做任何特别的事情。