我有一个填充了几个textareas的Jsp页面和一个执行ajax GET请求的提交按钮。用户可以输入任何文本。当用户输入双引号字符串或包含反斜杠的字符串时,我遇到问题。我目前正在按顺序使用encodeURIComponent和JSON.stringify来准备get请求url参数。这是正确的方法吗?后端代码接收不正确的Json对象。这是一个样本
用户类型:txtArea0中的Test "cases" are good
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"},...]"
我完全不知道为什么会发生这种情况。
答案 0 :(得分:2)
我目前正在使用encodeURIComponent和JSON.stringify
那是你的问题 您只应在实际构建该格式的字符串时转义。
由于您没有将值连接到URL,因此不应该调用encodeURIComponent
。
如果您将JSON概念化为URL,则需要在生成的JSON字符串上调用encodeURIComponent
,但不能更早。
总结
您需要在正确的时间应用正确的转义。
答案 1 :(得分:1)
试试这个,
var txtData0 = $('#txtArea0').val();
var txtData1 = $('#txtArea1').val();
var msg = JSON.stringify([{ "id": 0, "txtData" : txtData0},...]);
答案 2 :(得分:0)
我遇到了这个问题,当我在服务器端进行反序列化时遇到异常,我通过双重转义修复了这个问题(“如果该术语存在LoL”),请检查下面的函数:
function customEscape(str) {
return encodeURIComponent( str.replace('\"', '\\\"') );
}