2013-02-26 17 views
21

Bazı JavaScript varyasyonlarının değerlendirildiği bir projem var. Dizenin kaçması gerektiğinden (yalnızca tek tırnak), aynı kodu bir test işlevine yazdım. Oldukça basit JavaScript kodu aşağıdaki bit var:JavaScript değerlendirmesinde JavaScript dilinde tek tırnaklardan kaçınma

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); 
} 

Ve sürerek bunu bildirmek istiyoruz: fsdsd'4565sd. Eğer karakter doğru kaçan yapmıyoruz gibi de görünüyor

strInputString = strInputString.replace(... 

:

+0

Göreceli olarak daha güvenli bir yaklaşım olabilir, var strResult = eval ("(" + strInputString + ")"); '. Ayrıca, 'STRING' değişmez, yani string.replace() '** değiştirilen sonucu ** döndürür, ** dizgeyi değiştirmez. – Passerby

+1

http://jsfiddle.net/ebTtp/ – ssilas777

cevap

62

şey .replace() dize kendisini değiştirmez, bu nedenle böyle bir şey yazmak gerektiğidir. benim için çalıştı aşağıdaki:

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

Beklediğiniz bu mu? Evet, işte bu! Teşekkür ederim, bunun bir yerlerde aptalca bir hata olduğunu biliyordum. –

+0

Kalan ActionScript mohicanlar için şu işe yarar: var selam: String = "l'advancement"; greet = greet.split ("'"). ("\\'") birleştirmek; ExternalInterface.call ("function() {console.log ('" + selam + "')}"); – Stepan

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

ben çerçeve Prado ile PHP kod bu kısmı kullanılan beri bu var formattedString = string.replace(/'/g, "\\'"); eserler çok iyi, ama (bir PHP sınıfta js komut kaydedebilir konusunda hemfikir) Çift tırnak içinde çalışan bu örneğe ihtiyacım vardı.

Benim için çalışan çözüm, üç tane \ koyup çift tırnaktan kaçmanız gerektiğidir. "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

Ben üç \ eser etrafında olduğunu bulmakta vardı çünkü bu soruya cevap.