2013-02-26 2 views
21

私はいくつかのJavaScript varが評価されるプロジェクトを持っています。文字列をエスケープする必要があるので(一重引用符のみ)、私はテスト関数に全く同じコードを書いています。私はかなり簡単なJavaScriptコードの以下のビットがありますJavaScriptの評価のために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); 
} 

を、私はそれを警告したい、と言って:fsdsd'4565sd

+0

比較的安全なアプローチは、 'var strResult = eval("( "+ strInputString +") ");'です。また、 'STRING'は不変であるため、' string.replace() '**は置換された結果を返します。 – Passerby

+1

これはあなたが期待するものですかhttp://jsfiddle.net/ebTtp/ – ssilas777

答えて

62

事はあなたのような何かを書く必要がありますので.replace()は、文字列自体を変更しないということである。

strInputString = strInputString.replace(... 

また、あなたが正しくエスケープ文字をやっていないように思えます。以下は私のために働いた:

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

はい、これです!ありがとう、私はそれがどこか愚かな間違いだったことを知っていた。 –

+0

そこに残っているActionScriptモチカンについては、次のようになります。 var greet:String = "l'advancement"; greet = greet.split( "'")。join( "\\'"); ExternalInterface.call( "function(){console.log( '" + greet + "')}"); – Stepan

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

私は非常によく、このvar formattedString = string.replace(/'/g, "\\'");動作することを同意するが、私はフレームワークプラドとPHPのコードのこの部分を使用するので(あなたがPHPクラスでのjsスクリプトを登録することができます)二重引用符で囲んでこのサンプルが必要でした。

私のために働いた解決策は、\を3つ入れて二重引用符をエスケープする必要があるということです。 "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"

\が回避策であることがわかりましたので、私はその質問に答えました。

関連する問題