2009-02-27 12 views
34

Tengo una función javascript que pasa como cadena de consulta el valor de otra cadena de consulta.Cómo codificar una cadena de consulta para que sea el valor de otra cadena de consulta en javascript?

En otras palabras, quiero que la cadena de consulta que sea:

http://www.somesite.com/?somequery=%3fkey%3dvalue1%2520%26%2520key2%3value3 

Sin embargo, si vuelvo a dirigir la siguiente manera:

var url = 'http://www.somesite.com/?somequery='; 
url += escape('?key=value1&key2=value2'); 
window.location = url; 

que termina como http://www.somesite.com?somequery=?key1=value1&key2=value2 en Firefox e IE7 lo que significa que No puedo analizar la cadena de consulta correctamente.

También intenté usar encodeURIComponent que tampoco funcionó.

¿Hay otra función o un truco para forzar la redirección para mantener el valor somequery escapado?

Respuesta

65

encodeURIComponent funcionará. (Usted puede o no puede querer que el líder, dependiendo de lo que el guión está a la espera '?'.)

var c= 'd e' 
var query= '?a=b&c='+encodeURIComponent(c); 
var uri= 'http://www.example.com/script?query='+encodeURIComponent(query); 
window.location= uri; 

me lleva a:

http://www.example.com/script?query=%3Fa%3Db%26c%3Dd%2520e

Al pasar sobre que puede aparecer una vez decodificado en la barra de estado del navegador, pero terminarás en el lugar correcto.

escape/unescape() es lo incorrecto para codificar los parámetros de consulta, obtiene los caracteres Unicode y los más incorrectos. Casi nunca hay un caso donde escape() es lo que realmente necesita.

+0

Sí, estoy bastante seguro de que el escape está obsoleto. Buena llamada. –

+0

Puede que tenga que resolver tener '%' en [consulta] – KooiInc

+0

Esto funciona, aunque al analizar la cadena de consulta, debo decodificarla dos veces. Parece que cuando se codifica una vez, será decodificado por el navegador, pero cuando se codifica dos veces, no se decodificará en absoluto. extraño. – rmw

0
javascript:alert(escape('?key=value1&key2=value2')); 

¿Funciona bien para mí?

2

El método nativo escape hace eso. pero también puede crear un codificador personalizado como:

function encodeUriSegment(val) { 
    return encodeUriQuery(val, true). 
      replace(/%26/gi, '&'). 
      replace(/%3D/gi, '='). 
      replace(/%2B/gi, '+'); 
} 

esto reemplazará las claves utilizadas en las cadenas de consulta. aún más, puede aplicarlo a cualquier otra codificación personalizada agregando pares de pares clave-valor necesarios.

0
function downloadFile(){ 
     var filePath = "C:/Users/HP/Desktop/Project Folder/DemoProject/"; 

     var fileInfo = "Error_Issue Minor Cosmetic & Major Fatal Issues (Demo_Project) (2017)_GeneratedOn_12_21_2017 21924 AM.xlsx"; 
     if((filePath != undefined && filePath.length > 0) && (fileName != undefined && fileName.length > 0)){ 
     var downloadUrl = "../download?fileName="+encodeURIComponent(fileName)+"&filePath="+encodeURIComponent(filePath); 
     $window.location = downloadUrl; 
     }else{ 
     alert("Please define a fileName for downloading..."); 
     } 
} 
Cuestiones relacionadas