我正在使用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中执行它。
答案 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>