2011-06-20 16 views
11

Tengo una variable de JavaScript comming de sistema heredado con barras invertidas en la barra normal:La conversión de barras diagonales inversas en barras diagonales mediante javascript no funciona correctamente?

'/46\465531_Thumbnail.jpg'

y estoy tratando de convertir en esto:

'/46/465531_Thumbnail.jpg'.

No hay forma de solucionar el problema en el sistema heredado.

Este es el comando estoy corriendo en el navegador Internet Explorer 8:

javascript:alert("/46\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

como respuesta que se obtiene:

--------------------------- 
Message from webpage 
--------------------------- 
/46&5531_Thumbnail.jpg 
--------------------------- 
OK 
--------------------------- 

actualmente sólo quieren ser traducido como '/46/465531_Thumbnail.jpg'

Lo que está mal ?

Respuesta

22

Usted necesidad de duplicar la barra invertida en constante su cadena:

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

Si su sistema heredado es en realidad la creación constantes de cadena JavaScript en sus páginas con incrustadas, las barras invertidas-ONU citado (es decir, no duplicado) como eso, entonces está roto y tendrás problemas. Sin embargo, si obtiene las cadenas a través de una especie de llamada ajax en XML o JSON o lo que sea, entonces su código se ve bien.

+0

De hecho, lo entiendo. El problema es que no puedo manipular la cadena, así que no puedo modificar manualmente la barra inversa única y poner doble barra invertida. Estoy intentando hacer esto 'var test = escape ("/46 \ 465531_Thumbnail.jpg "); alerta (teste.replace ("% 26", '/')); ' –

+1

¿Cómo está exactamente la cadena en la página? Si hay código de JavaScript en la página creado dinámicamente por el código de backend, y * no * usa "\\", entonces básicamente está hundido; el código generado simplemente se rompe. No podrá arreglarlo de manera confiable, porque no podrá distinguir un carácter "bueno" de uno que sea el resultado de una barra invertida desordenada. – Pointy

+1

Sí, de hecho, la solución fue arreglar el código de backend que estaba ensuciando la barra invertida.Es imposible arreglarlo usando solo javascript. –

4

En realidad está interpretando \46 como una secuencia de código de escape para el carácter &. Si se va a codificar la cadena, lo que necesita para escapar de la \:

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 
      ^^ change \ to \\ 

muestra: http://jsfiddle.net/6QWE9/

0

No hay nada malo con la reemplace. La entrada es incorrecta.

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 
        ^
        \---------------- need to escape this! 
1

La pieza de recambio no es el problema, es la cadena misma. Su cadena:

"/46\465531_Thumbnail.jpg" 

no es /46\465531. Por el contrario, la barra diagonal inversa actúa como un personaje de escape. Debe cambiarlo a:

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/")); 

es decir, escapando de la barra invertida con una barra inclinada invertida.

Cuestiones relacionadas