2011-07-28 22 views
39

Tengo una aplicación web creada usando 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.Signo adicional en la cadena de consulta

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

Por favor, asesorar.

Gracias.

Editar: Código añadido con UrlEncode de

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

¿tiene el código? – tutts

+0

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

+0

FYI ten cuidado con el 'UrlBuilder', parece un poco inútil, así es como me tropecé con tu pregunta. Ver http://stackoverflow.com/questions/24576239/why-doesnt-uribuilder-query-escaping-url-encoding-the-query-string – KCD

Respuesta

81

+ signo 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 & que se utiliza para separar los diversos pares var=value en la cadena de consulta.

La mayoría de los scripts del lado del servidor decodifican los parámetros de consulta antes de usarlos, de modo que un + se convierte correctamente a un espacio. Ahora, si quiere que un literal + esté presente en la cadena de consulta, necesita especificar %2B en su lugar.

+ firmar en la cadena de consulta es URL decodificado en un espacio. %2B en la cadena de consulta está decodificado con URL a un signo +.

ver la diferencia entre

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

y

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

En los ejemplos anteriores, script del servidor de Google es el URL-decodificación de los parámetros de consulta y luego usarlos para hacer la búsqueda .

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

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

Espero que esto tenga codificación URL clara.

Por lo tanto, si desea que el signo + a ser preservada cuando un JavaScript es ir a buscar una dirección URL con + señales en sus parámetros de consulta y una secuencia de comandos del lado del servidor procesaría los parámetros de consulta después de URL-decodificación, debe cifrar la URL de los parámetros de consulta en la URL antes de usar la emisión de la solicitud HTTP get para que todos los signos + se conviertan a %2B cuando la solicitud llegue al script del lado del servidor.Ahora, cuando el script del lado del servidor URL-descodifica la cadena de consulta, todos los %2B se convierten de nuevo a los signos + que es lo que desea.

Consulte Encode URL in JavaScript? para obtener información sobre cómo codificar mediante URL los parámetros mediante JavaScript. Respuesta corta de la discusión que hay:

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

¿Cómo puedo reemplazar el signo + a% 2B en javascript. Porque estoy creando mi querystring en javascript. – domlao

+1

krakat, ver http://stackoverflow.com/q/332872/303363 –

4

Usted debe urlencode sus valores de cadena de consulta para asegurarse de que todos los caracteres especiales no se pierden.

+0

Me gusta esto, string str = Server.UrlEncode (Requery.QueryString ["nuevo"]); ? THanks – domlao

+0

No del todo, debe codificarlos antes de ponerlos en la cadena de consulta en lugar de cuando los saca de nuevo. ¿Cómo estás configurando los valores en la cadena de consulta? – DoctorMick

+0

en Javascript, como $ ("# btn"). Haga clic en (función() {var param = "C++"; ...}); – domlao

0

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

Crea tu url usando el Server.UrlEncode. p.

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

Si se trata de una URL, debe codificar la URL, ** Not ** Html Encode. Ellos son diferentes. –

+0

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

+0

¡Tienes razón! lo siento por cualquier inconveniencia !! – gred

-1

Prueba de esto, es que funciona para mí:

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

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

-1

añadir esta línea en Descifrar Funcation:

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

¿Qué pasa con los otros caracteres reservados? Esta solución solo arreglará el +, y no el? y etc –

0

antes de enviar su par ameter, es necesario comprobar si el parámetro contiene signo más, si tiene necesitar reemplazar a una sola bandera, por ejemplo: el parámetro es: klasjdlkasd + djid3223 se puede reemplazar: klasjdlkasdFLAGdjid3223

y al momento de convertir, necesita reemplace angain

klasjdlkasd + djid3223

Cuestiones relacionadas