2013-02-26 11 views
21

Ho un progetto, in cui viene valutata una variabile JavaScript. Poiché la stringa deve essere sfuggita (solo virgolette singole), ho scritto lo stesso codice esatto in una funzione di test. Ho la seguente pezzo di piuttosto semplice codice JavaScript:Escaping di virgolette singole nella stringa JavaScript per la valutazione JavaScript

function testEscape() { 
    var strResult = ""; 
    var strInputString = "fsdsd'4565sd"; 

    // Here, the string needs to be escaped for single quotes for the eval 
    // to work as is. The following does NOT work! Help! 
    strInputString.replace(/'/g, "''"); 

    var strTest = "strResult = '" + strInputString + "';"; 
    eval(strTest); 
    alert(strResult); 
} 

E voglio avvertire, dicendo: fsdsd'4565sd.

+0

Un approccio relativamente più sicuro potrebbe essere 'var strResult = eval (" ("+ strInputString +") ");'. Inoltre, 'STRING' è immutabile, quindi' string.replace() '** restituisce ** il risultato sostituito, non ** modifica ** la stringa. – Passerby

+1

È questo che ti aspetti http://jsfiddle.net/ebTtp/ – ssilas777

risposta

62

Il fatto è che .replace() non modifica la stringa stessa, così si dovrebbe scrivere qualcosa di simile:

strInputString = strInputString.replace(... 

Sembra anche che tu non stai facendo carattere fuga correttamente. Di seguito ha lavorato per me:

strInputString = strInputString.replace(/'/g, "\\'"); 
+0

Sì, è questo! Grazie, sapevo che era un errore stupido da qualche parte. –

+0

Per i rimanenti mohichi di ActionScript, questo funziona: var greet: String = "l'advancement"; greet = greet.split ("'"). Join ("\\'"); ExternalInterface.call ("function() {console.log ('" + greet + "'}}"); – Stepan

-3
strInputString = strInputString.replace(/'/g, "''"); 
2

io d'accordo che questo var formattedString = string.replace(/'/g, "\\'"); funziona molto bene, ma da quando ho usato questa parte del codice in PHP con il quadro del Prado (è possibile registrare lo script js in una classe PHP) Avevo bisogno di questo esempio lavorando all'interno di virgolette.

La soluzione che ha funzionato per me è che è necessario inserire tre \ e sfuggire alle doppie virgolette. "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

rispondere a questa domanda da quando ho avuto difficoltà a trovare che tre \ era il lavoro intorno.

Problemi correlati