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