c# - que - title con css
Atributo de URLEncode ASP.Net para uso en Cadena de consulta (6)
Necesito redireccionar a una url que pasa un parámetro como cadena de consulta.
Esto puede incluir un Ampersand en el valor. como
string value = "This & That";
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));
Sin embargo, esto devuelve http://www.example.com/?Value=This+&+That
¿Qué debería estar usando para codificar esta cadena?
EDITAR: Gracias a Luke por señalar lo obvio, el código realmente funciona correctamente. Me disculpo, ¡mi pregunta no era una pregunta válida después de todo!
La página que iba a tener tenía un montón de código antiguo heredado que, al parecer, está haciendo un poco de codificación y descodificación, por lo que parece que mi urlencode no funcionaba.
Desafortunadamente, mi solución es dejar de utilizar por completo un & hasta que el código en cuestión pueda ser reescrito. ¡No odies el viejo código!
Otro personaje que necesita escapar es el apóstrofo. Reemplácelo con% 27.
string url = Server.UrlEncode(value).Replace("''", "%27);
HttpUtility.UrlEncode () y Server.UrlEncode () no reemplazan este carácter junto con algunos otros por compatibilidad con versiones anteriores con otros .Net Frameworks. Consulte este artículo de Microsoft para obtener más detalles: http://connect.microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe
sin embargo, esto es correcto si tiene varios parámetros en la cadena de consulta.
por ejemplo: & firstname = bob & secondName = "Tracy and John"
Técnicamente haciendo:
value = value.Replace("&", "%26")
hará el truco
EDITAR: Parece haber algunos problemas complicados con los métodos completos de UrlEncode / HttpEncode que no funcionan del todo. Escribí un método simple hace un tiempo que puede ser útil. Esto debería cubrir todos los principales problemas de codificación, y también es fácil escribir un "desanitizador".
Protected Function SanitizeURLString(ByVal RawURLParameter As String) As String
Dim Results As String
Results = RawURLParameter
Results = Results.Replace("%", "%25")
Results = Results.Replace("<", "%3C")
Results = Results.Replace(">", "%3E")
Results = Results.Replace("#", "%23")
Results = Results.Replace("{", "%7B")
Results = Results.Replace("}", "%7D")
Results = Results.Replace("|", "%7C")
Results = Results.Replace("/", "%5C")
Results = Results.Replace("^", "%5E")
Results = Results.Replace("~", "%7E")
Results = Results.Replace("[", "%5B")
Results = Results.Replace("]", "%5D")
Results = Results.Replace("`", "%60")
Results = Results.Replace(";", "%3B")
Results = Results.Replace("/", "%2F")
Results = Results.Replace("?", "%3F")
Results = Results.Replace(":", "%3A")
Results = Results.Replace("@", "%40")
Results = Results.Replace("=", "%3D")
Results = Results.Replace("&", "%26")
Results = Results.Replace("$", "%24")
Return Results
End Function
Debe usar Server.UrlEncode(string containing the ampersand)
.
Acabo de probarlo y la cadena de consulta devuelta se codificó correctamente y luego se decodificó.
HttpUtility
no funcionó para esta operación.
Y si obtiene un valor de un GridView
& ampersand
"&"
& ampersand
bien podría aparecer como "&"
:
row.Cells[4].Text.ToString() = xxxx&
Entonces, en este caso, querrás usar:
.Replace("&", "%26")
La documentación sugiere que Server.UrlEncode
debe manejar los signos y símbolos correctamente.
Acabo de probar tu código exacto y la cadena devuelta se codificó correctamente: