web-dev-qa-db-ja.com

JavaScriptでの文字列のエスケープ

JavaScriptには、文字列でエスケープする必要がある文字にバックスラッシュを追加するためのPHPのaddslashes(またはaddcslashes)関数のような組み込み関数がありますか?

たとえば、これ:

これは、「単一引用符」と「二重引用符」を含むデモ文字列です。

...次のようになります:

これは、\ 'single-quotes \'および\ "double-quotes \"を含むデモ文字列です。

61
Steve Harrison

http://locutus.io/php/strings/addslashes/

function addslashes( str ) {
    return (str + '').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
}
88

二重引用符でこれを試すこともできます:

JSON.stringify(sDemoString).slice(1, -1);
JSON.stringify('my string with "quotes"').slice(1, -1);
69
Storm

Paolo Bergantinoによって提供される関数のバリエーションで、Stringで直接機能します。

String.prototype.addSlashes = function() 
{ 
   //no need to do (str+'') anymore because 'this' can only be a string
   return this.replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
} 

ライブラリに上記のコードを追加すると、次のことができるようになります。

var test = "hello single ' double \" and slash \\ yippie";
alert(test.addSlashes());

編集:

コメントの提案に従って、JavaScriptライブラリ間の競合を心配している人は誰でも次のコードを追加できます。

if(!String.prototype.addSlashes)
{
   String.prototype.addSlashes = function()... 
}
else
   alert("Warning: String.addSlashes has already been declared elsewhere.");
39
Marco Demaio

EncodeURI()を使用します

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

Webアプリケーションで使用するための適切なJSONエンコードおよび転送のために、文字列内のほとんどすべての問題のある文字をエスケープします。これは完全な検証ソリューションではありませんが、手間のかかる果物をキャッチします。

2
tcmoore