Tengo un marcador de JavaScript que, cuando se hace clic en él, redirige al usuario a una nueva página web y proporciona la URL de la página web anterior como un parámetro en la cadena de consulta.

Me encuentro con un problema cuando la página web original tiene un guión doble en la URL (ej. page--1--of--3.html). Estúpido, lo sé: no puedo controlar la página original La función javascript escape que estoy usando no escapa al guión, e IIS 6 da un error de archivo no encontrado si se le pide que sirva resource.aspx?original=page--1--of--3.html

¿Existe una función alternativa de escape de JavaScript que pueda usar? ¿Cuál es la mejor manera de resolver este problema? ¿Alguien sabe por qué IIS se ahoga en resource.aspx?original=page--1 y no en page-1?

4
ine 17 jun. 2009 a las 08:23

4 respuestas

La mejor respuesta

¿Puedes expandir la función de escape con alguna lógica personalizada para codificar los himnos manualmente?

resource.aspx?original=page%2d%2d1%2d%2dof%2d%2d3.html

Algo como esto:

function customEscape(url) {
    url = escape(url);
    url = url.replace(/-/g, '%2d');
    return url;
}

location.href = customEscape("resource.axd?original=test--page.html");  

Actualización, para un marcador:

<a href="javascript:location.href=escape('resource.axd?original=test--page.html').replace(/-/g, '%2d')">Link</a>
2
bendewey 17 jun. 2009 a las 04:44

- Se utiliza para comentar texto en algunos lenguajes de secuencias de comandos. SQL Server lo usa para agregar comentarios. ¿Utiliza alguna lógica de base de datos para almacenar esos nombres de archivo? ¿O crea alguna consulta donde este nombre es parte de la cadena de consulta en lugar de usar parámetros de consulta?

1
Wim ten Brink 17 jun. 2009 a las 04:55

Estás haciendo algo más mal. - es legal en URL y nombres de archivo. Tal vez el archivo realmente no se encuentra?

1
SpliFF 17 jun. 2009 a las 04:32

"escape" y "unescape" están en desuso precisamente porque no codifica todos los caracteres relevantes. NO USE ESCAPE O UNESCAPE . use "encodeURIComponent" y "decodeURIComponent" en su lugar. Compatible con todos los navegadores, excepto los más antiguos y decrépitos. Es realmente una lástima que este conocimiento no sea mucho más común.

(ver también encodeURI y decodeURI)

Edit: err acaba de probar, pero esto realmente no cubre los guiones dobles todavía. Lo siento.

4
Breton 17 jun. 2009 a las 05:35