2010-07-15 83 views
8

我正在使用JSTL從我們的數據庫中檢索一個值。我將它插入到一些JavaScript中以將其用作變量。我需要輸出JSTL所持有的值,因爲如果有單引號或雙引號,它會打破我的腳本。該值是用戶指定的。輸出JSTL逃脫?

例子:

執行以下操作:

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

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

實際上最終會看起來像:

​​

所以我需要轉換的JSTL VAR要像逃脫「戴爾% 27s卡車「之前是得到了JS,因爲它已經爲時已晚,當它到達我的JS能夠在JS做它。

回答

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 

但是,如果字符串有雙倍le引用,你仍然需要逃避它們:

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

工作,謝謝!我使用了雙反斜槓而不是%27。 – UpHelix 2010-07-15 22:06:45

+2

永遠不要編寫自己的轉義函數!因爲它會是錯誤的。例如,對於輸入「a b \\ c」,雙反斜槓示例失敗。它將被轉換爲\\',所以反斜槓被轉義,單引號將結束字符串。使用經過驗證和調試的現有功能,例如var x =' $ {myVar}'; – 2016-01-29 16:07:07

0

其他答案已被接受,但大衛Balazic做了一個偉大的觀點。 <spring:escapeBody>功能效果最好。

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