私はいくつかの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
。
問題は、.replace()
は文字列自体を変更しないため、次のように記述する必要があることです。
strInputString = strInputString.replace(...
また、キャラクターのエスケープを正しく行っていないようです。次は私のために働いた:
strInputString = strInputString.replace(/'/g, "\\'");
このvar formattedString = string.replace(/'/g, "\\'");
は非常にうまく機能することに同意しますが、コードのこの部分をフレームワークPradoでPHPで使用したため(jsスクリプトはPHP class)このサンプルは二重引用符内で動作する必要がありました。
私のために働いた解決策は、3つの_\
_を入れて二重引用符をエスケープする必要があるということです。 "var string = \"l'avancement\"; var formattedString = string.replace(/'/g, \"\\\'\");"
3つの_\
_が回避策であることがわかりませんでしたので、私はその質問に答えます。
JSON.stringify()
を使用して、バックスラッシュやその他の特殊文字など、すべてのベースをカバーするのが最適です。
var strTest = "strResult = " + JSON.stringify(strInputString) + ";";
eval(strTest);
alert(strResult);
周囲の二重引用符が追加されるため、単一引用符を含める必要はありません。
これだけが私のために働いた:
searchKeyword.replace("\'", "\\\'");//searchKeyword contains "d'av"
したがって、結果変数には「d\'av」が含まれます。
おそらく私が使用しているJSフレームワーク(Backbone.js)が原因で、RegExが機能しなかった理由がわかりません