我有以下网址:
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)的字符。我做错了什么?
答案 0 :(得分: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,则没有好办法处理(因为他们有效地向您发送无效请求)。
答案 1 :(得分:1)
这取决于web.config中的全球化元素:
<globalization requestEncoding="iso-8859-1" />
或者,如果您的网站是UTF-8
<globalization requestEncoding="utf-8" />
但在这种情况下,网址需要看起来像name=Cyan%c3%acde
。您应该始终使用URL帮助程序生成URL,以便正确编码它们。
答案 2 :(得分:0)
我能找到的一些东西:
HttpServerUtility.UrlDecode(你的参数)
HttpUtility.UrlDecode(你的参数)
Server.UrlDecode(你的参数)
这些都适合你吗?
答案 3 :(得分:0)
我在ASP.NET和js中遇到了与url编码类似的问题(“必须编码为%EC才能工作”。
如果您在<globalization requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" \>
节点中设置system.web
,则必须使用HttpContext.Current.Server.UrlEncode
来urlencode \ decode,这样您才能在web.config
中使用全球化设置。
在当前UrlEncode
中使用HttpContext
之前,我使用的是不使用当前全球化设置的HttpUtility.UrlDecode
。
为我工作!