2012-03-15 16 views
1

說我有一些JSP變種富通過JSP VAR到js函數時轉義字符

<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

不會[escape()](https://developer.mozilla.org/en/DOM/window.escape)工作嗎?然後使用'unescape()'將其轉換回來。 – sinemetu1 2012-03-15 18:32:57

+0

可能的重複:[如何在JSP上使用撇號或引號(由javascript使用)](http://stackoverflow.com/questions/1470768/how-to-escape-apostrophe-or-quotes-on-a-jsp -used-by-javascript) – tkone 2012-03-15 18:33:19

+0

[如何從JSP內部轉義單引號?](http://stackoverflow.com/questions/9708242/how-to-escape-a-single-quote-from -within-a-jsp) – BalusC 2012-03-15 19:43:13

回答

0

使用Apache commons-lang StringEscapeUtils.escapeEcmaScript()(或自己重新實現)實現一種靜態方法來轉義特殊字符(單引號和雙引號,換行符,製表符),然後使該函數成爲EL函數,並使用EL函數在JSP中:

new SomeFunction('${myFn:escapeJs(foo)}'); 

end of this page如何創建EL函數。

-1

你可以在C使用將escapeXml:如果你使用Spring進行

new SomeFunction('<c:out value="${foo}" escapeXml="true"/>'); 
+0

作爲屬性說明,''轉義XML特殊字符。它不會逃脫JS特殊字符。 – 2012-03-15 18:56:28

3

,你可以做到這一點。

new SomeFunction('<spring:escapeBody javaScriptEscape="true">${foo}</spring:escapeBody>');