3

我有以下网址:

http://localhost:8041/Reforge.aspx?name=Cyan%ECde&realmId=1

注意参数%EC的值name

%EC = 236 = ì (igrave)

在我的操作方法中:

public ActionResult Index(string name, int realmId) {...}

name[4] 是一个代码为 65533 (0xFFFD) 的字符。我究竟做错了什么?

4

4 回答 4

1

我在 ASP.NET 和 js 中遇到了类似的 url 编码问题(ì 必须编码为 %EC 才能工作)。

如果您<globalization requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" \>system.webnode 中设置,则必须使用HttpContext.Current.Server.UrlEncodeurlencode \ decode 导致您在web.config.

UrlEncode在当前使用之前,HttpContext我使用HttpUtility.UrlDecode的是不使用当前的全球化设置。

为我工作!

于 2012-04-24T12:54:11.237 回答
1

HttpUtility.UrlDecode("%EC")将该字符 (65533) 作为其输出。

HttpUtility.UrlEncode("ì")生产"%c3%ac"

你是如何产生这个的%EC?看起来您的编码不像 ASP.NET 所期望的那样工作

更新

您说您只是进入http://localhost:8041/Reforge.aspx?name=Cyanìde&realmId=1浏览器并且它没有正确编码。我建议您首先不要将其输入浏览器。如果您正在生成该 URL,则需要对其进行编码(使其呈现为<a href="http://localhost:8041/Reforge.aspx?name=Cyan%c3%acde&realmId=1">)。Firefox 将鼠标悬停在 ì 上时会显示此内容,但在单击或复制时会给出编码版本。

如果用户在 URL 中输入任意 unicode,那么您就没有一个好方法来处理它(因为他们实际上是在向您发送无效请求)。

于 2010-11-12T17:23:24.767 回答
1

这将取决于 web.config 中的全球化元素:

<globalization requestEncoding="iso-8859-1" />

或者,如果您的网站是 UTF-8

<globalization requestEncoding="utf-8" />

但在这种情况下,网址需要看起来像name=Cyan%c3%acde. 您应该始终使用 URL 助手来生成 url,以便它们被正确编码。

于 2010-11-12T17:37:28.230 回答
0

我能找到一些东西:

HttpServerUtility.UrlDecode(你的参数)

HttpUtility.UrlDecode(你的参数)

Server.UrlDecode(你的参数)

这些对你有用吗?

于 2010-11-12T17:22:39.907 回答