2011-06-20 6 views
11

Mam zmiennej javascript comming ze starszego systemu z ukośniki język ukośniki:Przekształcanie ukośników w ukośniki w przód przy użyciu javascript nie działa poprawnie?

'/46\465531_Thumbnail.jpg'

i staram się przekształcić w ten sposób:

'/46/465531_Thumbnail.jpg'.

Nie ma możliwości rozwiązania problemu w dotychczasowym systemie.

Oto polecenia Używam w przeglądarce IE8:

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

jako odpowiedź uzyskać:

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

faktycznie po prostu chcę być tłumaczone jako '/46/465531_Thumbnail.jpg'

Co jest nie tak ?

Odpowiedz

22

trzeba podwoić ukośnik w swojej stałej łańcuchowej:

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

Jeśli system Legacy jest faktycznie tworzenia JavaScript stałe ciągów znaków na swoich stronach z wbudowanymi, UN-cytowany (czyli nie podwojone) ukośniki jak to jest zepsute i będziesz miał problemy. Jednakże, jeśli otrzymujesz ciągi znaków za pośrednictwem wywołania ajaxowego w XML lub JSON lub cokolwiek innego, wtedy twój kod wygląda OK.

+0

Rzeczywiście to rozumiem. Problem polega na tym, że nie mogę manipulować ciągiem znaków, więc nie mogę ręcznie zmodyfikować pojedynczego ukośnika odwrotnego i wstawić podwójnego ukośnika odwrotnego. Próbuję to zrobić 'var test = escape ("/46 \ 465531_Thumbnail.jpg "); alert (teste.replace ("% 26", "/")); ' –

+1

Jak dokładnie ciąg tworzy go na stronie? Jeśli na stronie znajduje się kod JavaScript, który jest dynamicznie tworzony przez kod zaplecza, a jest to * nie * przy użyciu "\\", oznacza to, że jesteś właściwie zatopiony; wygenerowany kod jest po prostu uszkodzony. Nie będziesz w stanie go naprawić niezawodnie, ponieważ nie będziesz w stanie odróżnić "dobrej" postaci od jednej, która jest wynikiem zepsutego odwrotnego ukośnika. – Pointy

+1

Tak, rzeczywiście, rozwiązaniem było naprawienie kodu backendu, który zepsuł ukośnik odwrotny.Nie można go naprawić, używając tylko javascript. –

4

Jest to interpretacja \46 jako sekwencji kodów ewidencyjnych dla znaku &. Jeśli masz zamiar twardym kodu ciąg, trzeba uciec \:

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

próbkę: http://jsfiddle.net/6QWE9/

0

nic złego z wymienić. Dane wejściowe są błędne.

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

Część zamienna to nie problem, to sam łańcuch. Twój ciąg:

"/46\465531_Thumbnail.jpg" 

nie jest /46\465531. Raczej odwrotny ukośnik działa jako znak ucieczki. Musisz go zmienić na:

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

tj. Ucieczka przed ukośnikiem odwrotnym ukośnikiem.

Powiązane problemy