我在服务器端渲染了一些html代码。这被传递给一个jsp,它用这个html呈现一个javascript调用:
<script type="text/javascript">
window.parent.${param.popup_return}("${helpId}", "${content}");
</script>
内容就像
"
This is a <p class="xyz">test</p>
"
我的问题是 - 根据'内容'中的引用 - javascript调用错误,因为它被呈现为
<script type="text/javascript">
window.parent.${param.popup_return}("ybc", "This is a <p class="xyz">test</p>");
</script>
有谁知道如何解决这个问题(除了手动更换所有报价)?
答案 0 :(得分:0)
使用JSON编码器创建编码字符串。
但是你还必须确保输出不包含字符串文字中的序列</
,这在<script>
块中是无效的(</script
是版本也会破坏浏览器。)
默认情况下,许多JSON编码器可选择编码为<\/
或\u003C/
以避免此问题。
答案 1 :(得分:0)
我用这个:
<div id="result" style="display:none">
${content}
</div>
<script type="text/javascript">
window.parent.${param.popup_return}("${helpId}", dojo.byId("result").innerHTML);
</script>
这似乎完美无缺
答案 2 :(得分:0)
您在这里没有使用JSTL(您最初只使用JSTL标记了问题)。您正在模板文本中使用EL。它按原样打印。您希望使用JSTL核心<c:out>
来转义predefined XML entities(在此特定情况下也适用于HTML,引号属于转义的XML实体)。
window.parent.${param.popup_return}("<c:out value="${helpId}" />", "<c:out value="${content}" />");
另一种选择(如果你讨厌JSP语法高亮显示或验证器有关嵌套标签/引号的错误/ jerks)是JSTL函数fn:escapeXml()
:
window.parent.${param.popup_return}("${fn:escapeXml(helpId)}", "${fn:escapeXml(content)}");
答案 3 :(得分:0)
您是否尝试过使用单引号而不是双引号?即将"${content}"
更改为'${content}'