web-dev-qa-db-ja.com

jquery ajaxによって送信される文字列内のすべての特殊文字をエスケープします

WebサービスへのcontentType: "application/json; charset=utf-8", ajax投稿を行いながら、キーと値のペアでテキストを送信しようとしています。私が直面している問題は、パラメーター(ユーザーからのテキストを受け入れるパラメーター)の1つが引用符( ")を持っている場合、コードが壊れる[エラーメッセージ:無効なオブジェクトが渡された]です。

var text = $("#txtBody").val(); 
var output1 = JSON.stringify(text); 
var output2 = text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 

Jquery ajax投稿の特殊文字をエスケープする方法に関するアイデアはありますか?

18
developer747

なぜescapeを使用しないのですか?

escape(text);

https://developer.mozilla.org/en/DOM/window.escape

編集!!!!

コメントで述べたように、これは非推奨です。

非推奨のescape()メソッドは、特定の文字が16進数のエスケープシーケンスに置き換えられた新しい文字列を計算します。代わりにencodeURIまたはencodeURIComponentを使用してください。

代わりに、次のいずれかを使用します。

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

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

33
Trevor

この質問を見つける人のために:Webから削除されたエスケープメソッドを使用しないでくださいUse encodeURIComponent()またはencodeURI()代わりに
encodeURIComponent()
encodeURI()

13
zaynetro

私は同じ問題を抱えていましたが、それを解決するために、ajax呼び出しの方法を変更しました。

私のようなものがありました

var datatosend = "Hello+World";

$.ajax({
    "type": "POST", 
    "data": "info=" + datatosend 

そして、情報info = Hello Worldを送信し、文字+を空白に置き換えます。

それで正しいJSON文字列に変更します

$.ajax({
    "type": "POST", 
    "data": {"info":datatosend}, 

そして今、それは動作します。 info = Hello + World

3
David

値をエスケープするのに役立つ関数 escape(var) が既にあります。あなたが話している目的には十分なはずです

var output2 = escape(text);
2
Starx