说我有一些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对我来说似乎有点不好意思,我更喜欢不需要它的解决方案。
答案 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"/>');