Pergunta

C #, ASP.NET 3.5

I criar uma URL simples com uma querystring codificado:

string url = "http://localhost/test.aspx?a=" +
     Microsoft.JScript.GlobalObject.escape("áíóú");

que se torna bem: http: //localhost/test.aspx? a =% E1% ED% F3% FA (que é bom)

Quando eu debug test.aspx eu recebo decodificação estranho:

string badDecode = Request.QueryString["a"];  //bad
string goodDecode = Request.Url.ToString();    //good

Por que o QueryString não decodificar os valores?

Foi útil?

Solução

Você poderia tentar usar HttpServerUtility.UrlEncode .

documentação

Microsoft em Microsoft.JScript.GlobalObject. escapar estados que não é inteded a ser usado diretamente de dentro do seu código.

Editar:
Como disse nos comentários: Os dois métodos de codificar de forma diferente e Request.QueryString espera que a codificação utilizado pelo HttpServerUtility.UrlEncode uma vez que utiliza internamente HttpUtility.UrlDecode.

(HttpServerUtility.UrlEncode usa realmente HttpUtility.UrlEncode internamente.)

Você pode ver facilmente a diferença entre os dois métodos.
Crie um novo aplicativo Web ASP.NET, adicionar uma referência para Microsoft.JScript em seguida, adicione o seguinte código:

protected void Page_Load(object sender, EventArgs e)
{
  var msEncode = Microsoft.JScript.GlobalObject.escape("áíóú");
  var httpEncode = Server.UrlEncode("áíóú");

  if (Request.QueryString["a"] == null)
  {
    var url = "/default.aspx?a=" + msEncode + "&b=" + httpEncode;
    Response.Redirect(url);
  }
  else
  {
    Response.Write(msEncode + "<br />");
    Response.Write(httpEncode + "<br /><br />");

    Response.Write(Request.QueryString["a"] + "<br />");
    Response.Write(Request.QueryString["b"]);
  }
}

O resultado deve ser:

%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba

����
áíóú
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top