2012-01-24 7 views
7

mam pliku JS z niektórych XML w nim, gdzie XML jest podobno zamieniony na słowa przez serwer.można utworzyć ciąg JavaScript bez używania "lub" cytaty?

Np

var ip = "<lang:cond><lang:when test="$(VAR{'ip_addr'})">$(VAR{'ip_addr'})</lang:when></lang:cond>"; 

ta zostanie przekonwertowany do:

var ip = "192.168.0.0"; 

jednak w przypadku, gdy serwer nie działa zgodnie z przeznaczeniem, nie chcę tam być błąd składni, a to jest bardzo ważne Obecnie nie zrobi. być erozą składni r, ponieważ język używa obu typów cytatów. Nie mogę wymyślić sposób na obejście tego, ale być może istnieje inny sposób na wykonywanie cytatów w JavaScript? Lub, aby utworzyć ciąg?

Na przykład w Pythonie Chciałbym użyć potrójnych cudzysłowów:

ip = """<lang:cond><lang:when test="$(VAR{'ip_addr'})">$(VAR{'ip_addr'})</lang:when></lang:cond>""" 

Ktoś ma jasny pomysł?

+0

Dlaczego nie można pobrać XML osobno? W ten sposób nie będziesz musiał zawracać sobie głowy cytatami. – Tadeck

+0

Nie można utworzyć ciągu bez cudzysłowów. Alternatywnym sposobem tworzenia łańcucha znaków w javascript jest var str = new String ("ok"), str ma teraz wartość "ok". –

+0

@Heera - Ciągi na pewno mogą być tworzone bez cudzysłowów. 'String.fromCharCode (72,69,76,76,79)' tworzy ciąg 'HELLO'. (Wiem, że to wcale nie jest pomocne w tym przypadku, ale tak czy inaczej ...) – nnnnnn

Odpowiedz

4

W języku JavaScript można pominąć dowolny typ cytatu z numerem \.

Na przykład:

var str = "This is a string with \"embedded\" quotes."; 
var str2 = 'This is a string with \'embedded\' quotes.'; 

W szczególności, Twój blok kodu JavaScript powinny być zamienione na:

var ip = "<lang:cond><lang:when test=\"$(VAR{'ip_addr'})\">$(VAR{'ip_addr'})</lang:when></lang:cond>"; 

Generalnie, zawsze wolą uciec cytaty zamiast konieczności ciągłego przełączania typy ofert, w zależności od tego, jakiego rodzaju cudzysłowy mogą być używane.

+0

Wierzę, że to nie rozwiąże problemu OP ... – Tadeck

+0

@Tadeck - Pewnie, że tak. – ziesemer

+0

Tak, rozwiązuje problem. – Phrogz

0

Nie można utworzyć ciągu bez użycia pojedynczego lub podwójnego cudzysłowu, ponieważ nawet wywoływanie obiektu prototypowego String() nadal wymaga podania go przez ciąg znaków.

Wewnątrz XML byłoby użyć CDATA, ale wewnątrz JS musisz po prostu uciec '\"strings\"'"\'appropriately\'"

+7

Oczywiście można utworzyć ciąg bez użycia cudzysłowów. Nie twierdzę, że byłoby to pomocne dla tego problemu, ale nadal 'String.fromCharCode (72,69,76,76,79)' tworzy ciąg 'HELLO'. – nnnnnn

+0

Aha, fantastyczny pomysł. Teraz, kiedy wspomniałeś o tym wektorie, założę się, że możesz zrobić kilka technik obfuskacji JavaScriptu, aby to zrobić. – buley

17

musiałem utworzyć ciągi bez cudzysłowów dla projektu, jak również. Dostarczaliśmy javascript wykonywalnego klienta do przeglądarki na wewnętrzną stronę internetową. Odbiorczy koniec listuje podwójne i pojedyncze cudzyslowki, gdy są wyświetlane. Jednym ze sposobów, w jaki udało mi się obejść cytaty, jest deklarowanie mojego ciągu jako wyrażenia regularnego.

var x = String(/This contains no quotes/); 
x = x.substring(1, x.length-1); 
x; 
+1

Wow. To fajna sztuczka. Pomógł mi rozwiązać problem, w którym musiałem reprezentować "ciąg w ciągu znaków, w ciągu znaków, w ciągu znaków". :) Używałem PHP do zwracania ciągu JSON (1), który zawierał niektóre znaczniki HTML '' (2), z których jeden musiał zawierać atrybut 'onclick =" '(3), który wywołał obsługę metody JavaScript wymagało parametru ciągu (4). Nie miałem możliwości wstawiania cudzysłowów, a jednocześnie nie łamałem parsera JS, gdy ta sprytna sztuczka dała mi trzecią drogę reprezentującą wszystko. Radykalny, stary. Dziękuję Ci! – elrobis

+0

Dzięki! To było tak pomocne, że nie możesz sobie nawet wyobrazić. –

3

Korzystanie String prototype:

String(/This contains no quotes/).substring(1).slice(0,-1) 

Korzystanie String.fromCharCode

String.fromCharCode(72,69,76,76,79) 

Generowanie Char Kody do tego:

var s = "This contains no quotes"; 
var result = []; 
for (i=0; i<s.length; i++) 
{ 
    result.push(s.charCodeAt(i)); 
} 
result 
Powiązane problemy