1

说我有一些 jsp var foo

<c:set var="foo" value="foo's bar"/>

我有以下js

<script>
 new SomeFunction('${foo}');
</script>

这显然会产生错误

missing ) after argument list

因为声明最终是

new SomeFunction('foo's bar');

但是,我不想只用双引号将参数 ${foo} 括起来,因为 foo 的值也可能在其字符串中包含一个双引号,这会导致同样的问题。假设 foo 可以是任何字符串。我只将它设置为 foo 的 bar,这样示例就很清楚了。目前,我正在解决这样的问题:

<script>
 new SomeFunction('<c:out value="${foo}"/>');
</script>

在 SomeFunction 中:

SomeFunction = new function(foo) {
  $(someSelector).text($("<div/>").html(foo).text());
}

这个解决方案似乎有效 - 假设我没有错过一些极端情况。但是,我不相信这是最好的解决方案。任何替代方案或改进建议?使用那个临时 div 对我来说似乎有点 hacky,我更喜欢不需要它的解决方案。

4

3 回答 3

3

如果您使用的是 Spring,则可以这样做。

new SomeFunction('<spring:escapeBody javaScriptEscape="true">${foo}</spring:escapeBody>');
于 2014-06-16T04:04:20.267 回答
0

使用 Apache commons-lang 实现一个静态方法StringEscapeUtils.escapeEcmaScript()(或自己重新实现)以转义特殊字符(单引号和双引号、换行符、制表符),然后将此函数设为 EL 函数,并在 JSP 内部使用此 EL 函数:

new SomeFunction('${myFn:escapeJs(foo)}');

有关如何创建 EL 函数的信息,请参阅本页末尾。

于 2012-03-15T18:40:01.033 回答
-1

你可以在 c:out 中使用 escapeXml

 new SomeFunction('<c:out value="${foo}" escapeXml="true"/>');
于 2012-03-15T18:52:12.743 回答