我有一个文本框,它将信息发布到服务器,它是JSON格式的。假设我想为值输入两个引号,JSON结构看起来像:
{
"test": """"
}
我需要它看起来像:
{
"test": "\"\""
}
因此它将遵循JSON标准,并且可以解析/可字符化。
我尝试使用
var val = myVal.replace('"', "\\\"");
但这不起作用。 val
最终只有一个转义引用,因此\""
非常感谢任何帮助!
答案 0 :(得分:8)
我的回答做了一些假设,因为我必须在你的问题中填补相当大的空白:
如果我做对了,那就继续......
所以,对于一些占位符,你正在做:
function get_contents_of_textbox() {
// Dummy data for example
return 'My mum pushed and I said "Hello World"!';
}
function send_to_server(json_str) {
// Dummy action: display JSON string
console.log(json_str);
}
var myVal = get_contents_of_textbox();
var JSON = '{ "test": "' + myVal + '" }';
send_to_server(JSON);
要确保JSON
有效,转义它可能包含的任何引号和反斜杠。你已经试了一下:
myVal = myVal.replace('"', "\\\"");
{ "test": "My mum pushed and I said \"Hello World"!" }
只有第一个报价已被转义。这是因为默认情况下只替换搜索字符串的一个实例。
Mozilla文档says:
要执行全局搜索和替换,请在其中包含g标志 正则表达式或如果第一个参数是字符串,则包含 g在flags参数中。
不幸的是,flags
参数是非标准的,所以让我们切换到replace
的正则表达式版本,并使用其中的/g
开关:
myVal = myVal.replace(/"/g, '\\"');
(为了简洁起见,你会注意到我也压缩了替换字符串。)
结果:
{ "test": "My mum pushed and I said \"Hello World\"!" }
让我们也添加逻辑来逃避反斜杠,我们最终得到了这个:
function get_contents_of_textbox() {
// Dummy data for example
return 'My mum pushed [a back\\slash] and I said "Hello World"!';
}
function send_to_server(json_str) {
// Dummy action: display JSON string
console.log(json_str);
}
var myVal = get_contents_of_textbox();
myVal = myVal.replace(/\\/g, '\\\\'); // escape backslashes
myVal = myVal.replace(/"/g, '\\"'); // escape quotes
var JSON = '{ "test": "' + myVal + '" }';
send_to_server(JSON);
结果:
{ "test": "My mum pushed [a back\\slash] and I said \"Hello World\"!" }
答案 1 :(得分:4)
使用此
var val = myVal.replace(/"/g, '\\"');
答案 2 :(得分:0)
只需创建一个JS数组
var arr = {
test: '""'
}
让JSON接口为您处理转义。你不应该自己处理细节。
答案 3 :(得分:0)
正如您所说,您从文本框中获取字符串时,您无需对其执行任何操作即可将其恢复到服务器。如果您通过jQuery的$()
表示法或纯document.getElementById
获得文本框的值,则它已经被正确转义。 JavaScript不会获取文本框的值,并尝试将其放在引号中。
如果您的文字框中输入了""
,则document.getElementById('mytextbox').value
不等于"\"\""
。只有在定义字符串文字时才需要使用反斜杠。
尝试删除所有转义和正则表达式替换,只需从文本框中发回数据而不对其执行任何操作。你的json应该看起来像:
{
"test" : document.getElementById('myTextBox')
}