Cadena de consulta de inicio de sesión más


86

Tengo una aplicación web creada con C # y asp.net. Coloqué un valor de parámetro en la cadena de consulta con un signo más (+). Pero el signo más desaparece.

¿Cómo puedo incluir el signo más (+) en la cadena de consulta sin desaparecer?

Por favor avise.

Gracias.

Editar: código agregado con UrlEncode

string str = Server.UrlEncode(Requery.QueryString["new"]);

en realidad, el valor depende de la entrada del usuario.
domlao

Para su información, tenga cuidado con el UrlBuilder, parece un poco inútil, que es como me topé con su pregunta. Ver stackoverflow.com/questions/24576239/…
KCD

* UriBuilderno URL
KCD

Respuestas:


146

+sign tiene un significado semántico en la cadena de consulta. Se usa para representar un espacio. Otro carácter que tiene importancia semántica en la cadena de consulta es el &que se utiliza para separar los distintos var=valuepares de la cadena de consulta.

La mayoría de los scripts del lado del servidor decodificarían los parámetros de consulta antes de usarlos, para que a +se convierta correctamente en un espacio. Ahora, si desea que un literal +esté presente en la cadena de consulta, debe especificar en su %2Blugar.

+iniciar sesión la cadena de consulta está decodificada por URL en un espacio. %2Ben la cadena de consulta se descodifica la URL con un signo +.

Vea la diferencia entre

http://www.google.com/search?q=foo+bar

y

http://www.google.com/search?q=foo%2Bbar

En los ejemplos anteriores, la secuencia de comandos del servidor de Google decodifica la URL de los parámetros de consulta y luego los usa para realizar la búsqueda.

La codificación de URL no es más que un %signo seguido del código hexadecimal del carácter especial. Por ejemplo, sabemos que el código hexadecimal de Aes 0x41 (decimal: 65). Prueba esto:

http://www.google.com/search?q=%41

Espero que esto aclare la codificación de URL.

Por lo tanto, si desea que el +signo se conserve cuando un JavaScript obtiene una URL con +signos en sus parámetros de consulta y un script del lado del servidor procesa los parámetros de consulta después de la decodificación de URL, debe codificar los parámetros de consulta en la URL. antes de usar la emisión de la solicitud get HTTP para que todos los +signos se conviertan en %2B's cuando la solicitud llega al script del lado del servidor. Ahora, cuando el script del lado del servidor decodifica la URL de la cadena de consulta, todo %2Bse convierte de nuevo en +signos, que es lo que desea.

¿Ver Codificar URL en JavaScript? para aprender a codificar en URL los parámetros usando JavaScript. Respuesta corta de la discusión allí:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);

1
¿Cómo puedo reemplazar el signo + por% 2B en javascript? Porque estoy creando mi cadena de consulta en javascript.
domlao

5

Debe codificar mediante URLEncode los valores de la cadena de consulta para asegurarse de que no se pierda ningún carácter especial.


1
Así, string str = Server.UrlEncode (Requery.QueryString ["nuevo"]); ? GRACIAS
domlao

No del todo, debe codificarlos antes de colocarlos en la cadena de consulta en lugar de cuando los retire. ¿Cómo configura los valores en la cadena de consulta?
DoctorMick

en Javascript, como $ ("# btn"). click (function () {var param = "c ++"; ...});
domlao


1

¡Modifico mi declaración anterior para que nadie se confunda!

Crea tu URL usando Server.UrlEncode. p.ej

string myUrl = "http://myurl?param1="  + Server.UrlEncode("my+param+1");

3
Si es para una URL, debe codificar URL, no codificar HTML. Ellos son diferentes.
Damien_The_Unbeliever

Agregué mi cadena de consulta en javascript, ¿hay alguna forma posible de codificarla en javascript?
domlao

0

Otra forma sencilla es, Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1)asumiendo que mi URL es,http://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==


0

antes de enviarle el parámetro, debe verificar si el parámetro contiene el signo más, si necesita reemplazarlo por una bandera, por ejemplo: el parámetro es: klasjdlkasd + djid3223 puede reemplazar: klasjdlkasdFLAGdjid3223

y cuando vayas a convertir, necesitas reemplazar de nuevo

klasjdlkasd + djid3223


-1

Prueba esto, me funciona:

Request.QueryString["new"].Trim();


-2

Agregue esta línea en Decrypt Funcation:

strText = strText.Replace(" ", "+");

2
¿Qué pasa con los otros personajes reservados? Esta solución solo arreglará el +, y no el? y & etc
John Mc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.