代码之家  ›  专栏  ›  技术社区  ›  Mechlar

输出JSTL是否已转义[[副本]

  •  10
  • Mechlar  · 技术社区  · 16 年前

    我正在使用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>
    

    因此,我需要在is到达JS之前将JSTL var转换为“Dale%27s Truck”这样的转义,因为当它到达我的JS时已经太晚了,无法在JS中完成它。

    2 回复  |  直到 16 年前
        1
  •  12
  •   BalusC    13 年前

    尝试使用 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="\\\"" />
    
        2
  •  2
  •   Anthony Chuinard    10 年前

    另一个答案已经被接受了,但是大卫·巴拉齐奇提出了一个重要的观点。这个 <spring:escapeBody> 功能最好。

    <spring:escapeBody htmlEscape="false" javaScriptEscape="true">${myVar}</spring:escapeBody>