1

在 JS 中,我有一个字典,我用 json (json2) 进行字符串化:

my_dict = {"1":"hi you'll", "2":"hello"};
as_string = JSON.stringify(my_dict);

我需要将此作为值添加到表单中,但表单本身以字符串开头:

var my_form = '<form><input value = "'+as_string+'"></form>'

my_form 是一个字符串,因为它作为 DOM 添加到文档中(创建节点,添加 innerHTML,插入到文档中)

问题是双引号搞砸了——my_dict 中有引号,my_form 中有引号。但是 json 不应该逃避双引号吗?这不是它所做的一部分吗?或者我需要这样做吗?还是有什么别的办法??

4

3 回答 3

4

您需要使用 RegExp 对 HTML、f.ex 的字符串进行编码:

as_string = JSON.stringify(my_dict).replace(/\"/g,'&quot;');

或者尽可能使用 DOM 操作。

于 2013-07-17T09:58:51.187 回答
3

my_form 是一个字符串,因为它作为 DOM 添加到文档中(创建节点,添加 innerHTML,插入到文档中)

通过将字符串拼凑在一起来生成代码比它值得更痛苦。不要这样做。使用标准 DOM,而不是 innerHTML。这将照顾你逃跑。

 var frm = document.createElement('form');
 var ipt = document.createElement('input');
 ipt.value = as_string;
 frm.appendChild(ipt);

但是 json 不应该逃避双引号吗?

编码为 JSON 将转义 JSON 格式的引号。然后您将 JSON 嵌入到 HTML 中,因此您也需要为 HTML 转义它。(或者,正如我上面建议的那样,绕过 HTML 并直接进行 DOM 操作)。

于 2013-07-17T09:55:00.943 回答
0

如果您只想将其保留在 DOM 中,也可以使用escape :

my_dict = {"1":"hi you'll", "2":"hello"};
as_string = escape(JSON.stringify(my_dict));

// as_string : %7B%221%22%3A%22hi%20you%27ll%22%2C%222%22%3A%22hello%22%7D

当您获得价值时,就逃跑了,

as_string = unescape(as_string)

// as_string : {"1":"hi you'll","2":"hello"}
于 2013-07-17T10:05:59.143 回答