0

いくつかのテキストエリアと ajax GET リクエストを実行する送信ボタンが設定された Jsp ページがあります。ユーザーは任意のテキストを入力できます。ユーザーが二重引用符で囲まれた文字列またはバックスラッシュを含む文字列を入力すると、問題が発生します。私は現在、encodeURIComponent と JSON.stringify をその順序で使用して、get リクエストの URL パラメータを準備しています。それは正しい方法ですか?バックエンド コードが不適切な Json オブジェクトを受信して​​います。これがサンプルです

ユーザー タイプ: Test "cases" are goodtxtArea0 内

JS コード:

var txtData0 = encodeURIComponent($('#txtArea0').val());
var txtData1 = encodeURIComponent($('#txtArea1').val());
var msg = JSON.stringify([{ "id": 0, "txtData" : txtData0},...]);

"[{ "id": 0, "txtData" : "Test "cases" are good"},...]"ただし、なぜこれが起こっているのかまったくわからないため、サーバーはメッセージを受信して​​います。

4

3 に答える 3

2

現在、encodeURIComponent と JSON.stringify を使用しています

それはあなたの問題です。
実際にその形式で文字列を作成している場合にのみエスケープする必要があります。

値を URL に連結していないため、 を呼び出すべきではありませんencodeURIComponent

JSON を URL に連結する場合はencodeURIComponent、結果の JSON 文字列を呼び出す必要がありますが、それ以前は必要ありません。

要約すれば

エスケープ メソッドは、コードを機能させる魔法のソースではありません。

正しいタイミングで正しいエスケープを適用する必要があります。

于 2013-06-20T16:45:37.243 に答える
1

これを試して、

var txtData0 = $('#txtArea0').val();
var txtData1 = $('#txtArea1').val();
var msg = JSON.stringify([{ "id": 0, "txtData" : txtData0},...]);

フィドル http://jsfiddle.net/LvGLe/

于 2013-06-20T16:46:21.960 に答える
0

私はその問題を抱えていて、サーバー側でデシリアライズしようとすると例外を受け取っていました.ダブルエスケープ(「その用語が存在する場合LoL」)でその問題を修正しました.以下の機能を確認してください:

function customEscape(str) {
    return encodeURIComponent( str.replace('\"', '\\\"') );
}
于 2015-01-15T20:30:21.927 に答える