开发者

ASP.NET MVC 2 - Problem with Request encoding

Hello!

There is a controller and an action which receives one param through GET, approximately here so:

www.site.com/controller/action/?query=параметр <- Russian word

Problem:

Example 1: www.site.com/controller/action/?query=Пример <- Russian word

Example 2: www.site.com/controller/action/?query=Example

Reading param:

var param = Request.QueryString["query"];

Result 1:

  param = "������"

The data from debugger:

Request.RawUrl = "/controller/action/?q=%CF%F0%E8%EC%E5%F0"
QueryString = {q=%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd}

Result开发者_运维百科 2:

param = "Example"

The data from debugger:

Request. RawUrl = "/controller/action/?q=Example"
QueryString = {q=Example}

ContentEncoding is setted into UTF-8.

Web.config:
<globalization requestEncoding="utf-8" responseEncoding="utf-8"
           fileEncoding="utf-8" />

Question: How can i correctly get param with russian word?


You should never use Russian words in URI (и даже не стоит пробовать). You should encode them.

RFC 1738: Uniform Resource Locators (URL) specification

..Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.

If your users going to enter urls themselves in russian - (for searching) you can try UrlDecode Request.Url


You need to UrlEncode the querystring values.


HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default) 

solves the problem.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜