0

我有一个 Jsp 页面,其中填充了一些文本区域和一个执行 ajax GET 请求的提交按钮。用户可以输入任何文本。当用户输入双引号字符串或包含反斜杠的字符串时,我遇到了问题。我目前正在使用 encodeURIComponent 和 JSON.stringify 来准备获取请求 url 参数。这是正确的做法吗?后端代码正在接收不正确的 Json 对象。这是一个示例

用户类型:Test "cases" are good在 txtArea0

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 回答