ASP.NET MVC 2 - Problem with Request encoding

2019-07-18 12:02发布

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?

3条回答
Bombasti
2楼-- · 2019-07-18 12:32
HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default) 

solves the problem.

查看更多
对你真心纯属浪费
3楼-- · 2019-07-18 12:34

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

查看更多
爷、活的狠高调
4楼-- · 2019-07-18 12:37

You need to UrlEncode the querystring values.

查看更多
登录 后发表回答