2012-07-04 17 views
6

Estoy tratando de eliminar la codificación URI de un enlace, pero decodeURI no parece estar funcionando del todo.decodeURI no funciona completamente

enlace Mi ejemplo es la siguiente: /linkout?remoteUrl=http%253a%252f%252fsandbox.yoyogames.com%252fgames%252f171985-h-a-m-heroic-armies-marching

Después de ejecutar la secuencia de comandos JavaScript, que se ve así:

http%3a%2f%2fsandbox.yoyogames.com%2fgames%2f171985-h-a-m-heroic-armies-marching 

¿Cómo puedo deshacerme de los restantes códigos no correctas en el URI?

Mi código de decodificación:

var href = $(this).attr('href');   // get the href 
var href = decodeURI(href.substring(19)); // remove the outgoing part and remove the escaping 
$(this).attr('href', 'http://'+href)  // change link on page 
+0

use decodeURIComponent() en su lugar – dano

+0

Tenga en cuenta también que construir el objeto "$ (this)" dos veces en un solo pase de ejecución no es una buena idea, así que en caché una vez al principio de la función y utilizando el objeto en caché cuando sea requerido –

+1

'$ (this) .attr ('href')' es solo una forma más lenta y larga de escribir 'this.href'. – RobG

Respuesta

21

la url parece que se codificó en dos ocasiones, pero pienso que deben utilizar decodeURIComponent

decodeURIComponent(decodeURIComponent("http%253a%252f%252fsandbox.yoyogames.com%252fgames%252f171985-h-a-m-heroic-armies-marching")) 

resultados en: "http: //sandbox.yoyogames. com/juegos/171985-ham-heroic-army-marching "

pero debe comprobar por qué tiene la URL codificada dos veces por adelantado

+1

¿Tal vez coloque su código dentro de bloques de código? +1 –

+0

-.- Me perdí al volver a indentificar ... gracias por la sugerencia :) comment +1 –

+0

No es mi sitio web donde estoy escribiendo este código, es para un UserScript. No tengo idea de por qué están codificando doblemente el URI, se los preguntaré alguna vez. – ixchi

1

Acabo de encontrar esta situación en un controlador ASHX para el verbo PUT. Parece que ASP.NET codifica mi XML para mí, por lo que mi llamada al lado del servidor a HttpUtility.UrlEncode no fue necesaria. Repararlo llamando al Javascript del lado del cliente decodeURI dos veces - está cerrando la puerta del granero después de que las vacas ya se fueron y el HTTP que estaba enviando fue una violación del protocolo.

me hubiera comentado y más-one'd respuesta de Tobias Krogh, pero no tengo los puntos que lo hagan ...

Sin embargo, sigo pensando que es importante tener en cuenta que el fallo está discutiendo aquí no es un decodeURI de Javascript ni nada, es un error de validación de datos.

Cuestiones relacionadas