2012-01-12 11 views
22

Al depurar en ASP.NET MVC, no veo una diferencia entre:¿Por qué está codificada la URL de la coma?

http://mysite.com?q=hi,bye 

y

http://mysite.com?q=hi%2Cbye 

La cadena de consulta parámetro "q" siempre tiene un valor de "hola, adiós" .

¿Por qué está codificada la coma?

Quiero hacer algo como esto https://stackoverflow.com/a/752109/173957.

que tienen esta forma:

<form method="GET" action="/Search"> 
    <input type="hidden" name="q" value="hi,bye"/> 
    <input type="submit" value="ok"/> 
</form> 

¿Cómo puedo evitar que este valor sea codificada?

+3

* ¿Por qué * quieres evitar que se codifique? ASP.NET lo decodificará automáticamente, ¿cuál es el problema? – Jon

+2

Supongo que? Q = hola, bye es un poco más legible que? Q = hi% 2Cbye. Además, soy mayormente solo curiosidad. –

+0

Hace años, utilicé explícitamente una coma en el valor de mi cadena de consulta para el _specific_ razón por la que _no fue codificada_ y, por lo tanto, fácilmente legible en la barra de direcciones. Una pena que algunas bibliotecas/navegadores ahora lo codifiquen. –

Respuesta

16

La especificación de URI, RFC 3986, especifica que los componentes de ruta de URI no contienen caracteres reservados no codificados y la coma es uno de los caracteres reservados. Para sub-delims, como la coma, dejarla sin codificar pone en riesgo el carácter que se trata como sintaxis del separador en el esquema de URI. La codificación porcentual garantiza que el carácter pasará como datos.

+23

En la pregunta, la coma no está en el componente de ruta de URI, sino en el componente de consulta de URI, que, de acuerdo con RFC 3986, puede contener subdefiniciones, que incluyen la coma. –

+0

Si estoy leyendo la especificación correctamente: 'path = path-absolute' =>' path-absolute = "/" [segment-nz * ("/" segment)] '=>' segment = * pchar' => ' pchar = unreserved/pct-encoded/sub-delims/":"/"@" '=>' sub-delims = "!"/"$"/"&"/"'"/"("/")"/"*"/"+"/","/";"/"=" '. Por lo tanto, una coma es válida en un segmento, consulta o fragmento de URI. – joeyhoer

2

Esto realmente depende del navegador. El navegador toma el formulario HTML y decide cómo construir la URL en función de las entradas del formulario.

Si está utilizando un navegador realmente antiguo (o mal programado), es posible que no codifique la coma. Si cumple con los estándares de RFC, realmente debería estar codificado.

Si desea evitar que la coma se codifique para todos los navegadores, debería usar JavaScript y construir la URL usted mismo.

<script lang="JavaScript"> 
    document.location.href = "/Search?q=hi,bye"; 
</script> 

En cualquier caso, no debe importar, ya que debe ser la decodificación de los parámetros de cadena de consulta de todos modos, y el resultado será el mismo.

+0

Sí, el uso de js definitivamente permitirá evitar que los params de la consulta se codifiquen. –

-1

hay varios caracteres que tienen un significado especial (como +? # Etc.) o directamente no están permitidos (como espacio, coma, etc.) en una URL. para usar dichos caracteres en una URL, necesita codificarlos y decodificarlos. Read more Here

ASP.NET codifica y descodifica automáticamente todos los caracteres requeridos como este, por lo que no tiene que preocuparse por ellos.

+1

Pero realmente no tiene sentido que la coma esté codificada. Incluso en el enlace que proporcione, la coma no se menciona como un carácter ilegal. Incluso en la parte de prueba del enlace que proporcionó, "hola, adiós" no es diferente después de codificarlo. –

+2

Coma tiene un significado especial en las URL, porque denota los parámetros del segmento. Ver [este] (http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes) enlace. Busque esquemas de datos, geo y ldap –

7

me encontré con esta lista de caracteres que no requieren codificación URL: http://web.archive.org/web/20131212154213/http://urldecoderonline.com/url-allowed-characters.htm

actualización
Desde el enlace original se rompió, solía archivo.org para obtener el siguiente texto de la página desde diciembre 2013

Lista de caracteres de URL permitidas

sin reservas - pueden ser codificados, pero no es necesario

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z 
0 1 2 3 4 5 6 7 8 9 - _ . ~ 

Reservados - Tiene que ser codificado a veces

! * ' () ; : @ & = + $ ,/? % # [ ] 
+2

Ya no parece funcionar, la página se reemplaza por el sitio del anuncio. –

Cuestiones relacionadas