字符串在html隐藏输入中奇怪地保存

时间:2011-08-22 06:54:52

标签: java html jsp

我有一个类似于服务器端的字符串

  String productIDs = "[{"productID":"226167","productName":"It is my life (Bingo)"},{"productID":"3193","productName":"It is your name (jingo)"},{"productID":"273838","productName":"It's the same milk/Butter i drink/ate yesterday"}]"

现在我将它保存在隐藏的输入字段中

<input type="hidden" class="hiddenInput" value="<%=productIDs %>"  />

但是当我通过萤火虫检查它时,它的保存非常如下

<input type="hidden" class="hiddenInput" yesterday"}]"="" is ="" my ="" Butter ="" life ="" (Bingo)"},{"productid":"273838","productname":"It ="" crmo="" (paar)"},{"productid":"3193","productname":"It ="" milk="" same ="" flip-off="" productid":"226167","productname":"It ="" value="[{" />

任何人都知道为什么会这样?

4 个答案:

答案 0 :(得分:2)

问题在于你保存字符串的方式,你必须切换你使用的引号类型,否则js不知道字符串结束和开始的位置。

在你的问题中它看起来像这样:

String productIDs = "[{'productID':'226167','productName':'It is my life (Bingo)'},{'productID':'3193','productName':'It is your name (jingo)'},{'productID':'273838','productName':'It's the same milk/Butter i drink/ate yesterday'}]"

您也可以使用\"代替',但对我来说,这更令人困惑。

修改

您可以使用以下代码执行此操作:

strUWantToChange.replace('"',"'");

答案 1 :(得分:1)

如果您的String中有引号,则需要在将它粘贴到HTML之前将其转义。

答案 2 :(得分:1)

正如其他答案所说,必须转义报价。这些不是唯一应该转义的字符。系统地以HTML格式转义<>'&。风险是

  • HTML无效
  • 破页
  • XSS攻击和安全漏洞

每当您必须显示您不确定其中不包含任何此类字符的数据时(例如:直接或间接来自用户的数据,通常是自由文本数据),请转义此数据

这是通过两个简单的结构在JSP中完成的:

  • JSTL <c:out>代码:
  • JSTL fn:escapeXml EL功能:${fn:escapeXml(productIDs)}

Scriptlet不应该在JSP中使用多年。使用JSTL,其他自定义标签和EL。

答案 3 :(得分:0)

试试这个:

String productIDs = "[{\"productID\":\"226167\",\"productName\":\"It is my life (Bingo)\"},{\"productID\":\"3193\",\"productName\":\"It is your name (jingo)\"},{\"productID\":\"273838\",\"productName\":\"It's the same milk/Butter i drink/ate yesterday\"}]";