将jsp var传递给js函数时转义字符

时间:2012-03-15 18:28:27

标签: jquery jsp html-escape-characters

说我有一些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的栏,所以这个例子很清楚。目前,我正在解决这个问题:

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

并在SomeFunction中:

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

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

3 个答案:

答案 0 :(得分:3)

如果你正在使用Spring,你可以这样做。

new SomeFunction('<spring:escapeBody javaScriptEscape="true">${foo}</spring:escapeBody>');

答案 1 :(得分:0)

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

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

有关如何创建EL功能,请参阅end of this page

答案 2 :(得分:-1)

你可以在c:out中使用escapeXml

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