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"]);
domlao
fuente
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);
Susam Pal
fuente
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.

DoctorMick
fuente
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
4

Consulte la referencia de codificación de URL HTML

Debe codificar el signo +: su valor debe ser% 2B

Morten Anderson
fuente
+El signo está permitido en el valor del parámetro de consulta, donde no debe codificarse, porque ya codifica 'espacio'
ZZ 5
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");
gred
fuente
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==

Tiburón
fuente
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

Michael Rodrigues
fuente
-1

Prueba esto, me funciona:

Request.QueryString["new"].Trim();
kobalt
fuente
-2

Agregue esta línea en Decrypt Funcation:

strText = strText.Replace(" ", "+");
Vijay Mungara
fuente
2
¿Qué pasa con los otros personajes reservados? Esta solución solo arreglará el +, y no el? y & etc
John Mc