2011-01-27 13 views
27

Tengo un texto de consulta codificado con JavaScript, pero he encontrado un caso de uso en el que podría tener que codificar el mismo texto en el servidor, y la codificación que está sucediendo no es la mismo. Necesito que sea lo mismo. Aquí hay un ejemplo.Citas y espacios de codificación URL

Ingresé "I like food" en el cuadro de búsqueda y presiono el botón search. JavaScript codifica esto como %22I%20like%20food%22

Digamos que obtengo el mismo valor que una cadena en un objeto de solicitud en el lado del servidor. Se verá así: "\"I like food\""

Cuando uso HttpUtility.UrlEncode(value), el resultado es "%22I+like+food%22". Si uso HttpUtility.UrlPathEncode(value), el resultado es "\"I%20like%20food\""

Así UrlEncode es codificar mis citas, pero está utilizando el carácter + para espacios. UrlPathEncode está codificando mis espacios pero no está codificando mis citas escapadas.

Realmente lo necesito para hacer ambas cosas, de lo contrario, el código de Búsqueda me atrapa por completo (y no tengo control sobre el código de búsqueda).

¿Consejos?

+2

Haga una cadena de búsqueda/reemplazo para reemplazar espacios con% 20, luego haga el código UrlEncode normal? –

+1

@Marc B: ¿No haría eso que UrlEncode codificara los caracteres "%" (resultando en% 2520 para cada espacio)? Comportamiento muy extraño de UrlPathEncode. Al menos, UrlEncode documenta su conversión de espacios a "+". UrlPathEncode no tiene nada que ver con no convertir comillas ... –

+1

Hmm. buen punto. Supongo que podrías ir por el otro lado, UrlEncode primero, luego buscar/reemplazar + 's con% 20's –

Respuesta

51

UrlPathEncode no escapa " porque no necesitan ser escapado de componentes de la ruta.

Uri.EscapeDataString debe hacer lo que quiera.

+2

Gracias! Es extraño que muy pocas personas lo sepan. – Samo

+1

Estoy de acuerdo. Desearía que el uso/conocimiento de Uri.EscapeDataPath estuviera más extendido, ya que esto era exactamente lo que necesitaba. –

9

Hay algunas opciones disponibles para usted, la más rápida podría ser usar UrlEncode y luego hacer una cadena. Reemplazar para intercambiar los caracteres + con %20.

Algo así como

HttpUtility.UrlEncode(input).Replace("+", "%20"); 
+0

Gracias. Consideré la opción de reemplazo de cadenas, pero esperaba que hubiera un método que funcionara correctamente. Parece que tendré que recurrir a esto sin embargo. Por supuesto, dijiste que hay algunas opciones y que solo enlistaste una ... Me interesaría ver a los demás. ¡Gracias! – Samo

+1

Encontré útil System.Web.HttpUtility.UrlPathEncode (string str); para dar% 20 por espacio – Jivan

+1

No me gusta esta solución en absoluto ... reemplazar "+" con "% 20" resolverá problemas si el texto tiene espacios, pero creará otros problemas si el texto tiene "+" !! ! –

-1
WebUtility.UrlEncode(str) 

codificarán todos los caracteres que necesitan ser codificados utilizando el formato %XX, incluyendo el espacio.

+3

Esto es simplemente incorrecto y, por lo tanto, engañoso. 'WebUtility.UrlEncode' convierte un espacio en un '+' – Coops

+2

Nota: esta respuesta se marcó y posteriormente entró en una [cola de revisión] (http://stackoverflow.com/review/low-quality-posts/16071767). No debería haber sido marcado ya que es un intento de responder la pregunta. La respuesta a las respuestas incorrectas es downvote, no flag. –

Cuestiones relacionadas