输出JSTL逃脱了吗?

时间:2010-07-15 21:33:36

标签: java javascript jstl escaping

我正在使用JSTL从我们的数据库中检索一个值。我正在将其插入到一些javascript中以将其用作变量。我需要转义JSTL所持有的值的输出,因为如果有单引号或双引号则会破坏我的脚本。该值是用户指定的。

示例:

执行以下操作:

<c:set var="myVar" value="Dale's Truck"/>

<script type="text/javascript">
    var mayVar = '${myVar}';
</script>

实际上最终看起来像:

<script type="text/javascript">
    var mayVar = 'Dale's Truck';//extra single quote breaks the JS
</script>

因此,我需要将JSTL var转换为像“Dale%27s Truck”之类的转义才能进入JS,因为它已经太晚了,当它到达我的JS时能够在JS中执行它。

2 个答案:

答案 0 :(得分:12)

尝试使用fn:replace

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<c:set var="myVar" value="Dale's Truck" />
<c:set var="search" value="'" />
<c:set var="replace" value="%27" />

<c:set var="myVar" value="${fn:replace(myVar, search, replace)}"/>

或者你可以用反斜杠来逃避单引号:

<c:set var="replace" value="\\'" />

或者如果你甚至不想做所有这些并且你确定该字符串不包含双引号,为什么不这样做:

var myVar = "${myVar}"; //string enclosed with double quotes instead of single quotes

但是如果字符串有双引号,你仍然需要转义它们:

<c:set var="search" value="\"" />
<c:set var="replace" value="\\\"" />

答案 1 :(得分:2)

另一个答案已被接受,但David Balazic提出了一个很好的观点。 $(".activities input:checkbox:checked") // Get the text from the parent .map(function(idx, el) { return $(el).parent().text(); }) // convert the jquery object to an array .toArray() // extract the value from the string using regex .map(function(item) { var match = item.match(/\$(\d+)/); return parseInt(match[1]); }) // calculate the total with reduce .reduce(function(cur, next) { return cur + next; }); 功能效果最佳。

<spring:escapeBody>