2

我正在使用 form:hidden 来自 spring 表单的标签在 json 中存储一些值

<form:hidden path="myJson"/>

此 JSON 值具有以下性质:

[{"html":"<a href=\"index.html\">text has &#39;single quotes&#39; or even \"double quotes\"</a>"}]

因此 JSON 有双引号,如果它们在字符串中,则用 \" 转义,并且可能有单引号作为其 HTML 实体转义

&#39;

所以我一直在使用像这样的普通输入 type="hidden" :

<input type="hidden" name="myJson" value='[{"html":"<a href=\"index.html\">text has &#39;single quotes&#39; or even \"double quotes\"</a>"}]'>

注意 value 属性使用单引号。现在,使用 spring 形式输出使用双引号:

<input type="hidden" name="myJson" value="[{"html":"<a href=\"index.html\">text has &#39;single quotes&#39; or even \"double quotes\"</a>"}]">

所以当我得到值时,我只得到“[{”,其余的都写在页面的正文中。

另外,如果我不能像这样使用 htmlEscape="false" :

<input:hidden path="myJson" htmlEscape="false"/>

因为我得到了充满 htmlEntities 的所有值:

[{&quot;html;&quot...

然后使用此 JSON 值的库按字面意思读取它们,而不是编写链接,而是在正文中写入完整的 HTML。

有什么方法可以改变 input:hidden 的输出,使其显示单引号而不是双引号?

或者,有没有更好的方法来实现这一点?要求是这个 JSON 可以包含 HTML 以及单引号和双引号。

谢谢!

4

1 回答 1

2

您可以尝试使用 javascript,如下所示:

html

<input type="hidden" id="example" value="">

js

var json = JSON.stringify([{"product_id":123,"name":"stack"}]);
document.getElementById('example').setAttribute('value', json.replace(/"/g, "&quot;"));
于 2014-03-20T10:58:26.800 回答