2010-09-22 38 views
0

我在服務器端呈現了一些html代碼。這是傳遞給渲染JavaScript的調用與這個網站一個jsp:將呈現的html傳遞給javascript函數

<script type="text/javascript"> 
    window.parent.${param.popup_return}("${helpId}", "${content}"); 
</script> 

內容就像是

" 
This is a <p class="xyz">test</p> 
" 

我的問題是 - 根據「內容」引號 - 的Javascript成爲電話是錯誤的,因爲它被渲染到

<script type="text/javascript"> 
    window.parent.${param.popup_return}("ybc", "This is a <p class="xyz">test</p>"); 
</script> 

有誰知道我可以解決這個問題(除了手動更換所有引號)?

+0

我害怕轉義引號將在任何解決方案中發揮作用。 – 2010-09-22 10:46:20

回答

0

使用JSON編碼器創建編碼字符串。

但你還必須確保輸出不包含字符串文字序列</,這在<script>塊無效(</script的是,也將打破瀏覽器的版本)。

許多JSON編碼器默認或選擇編碼爲<\/\u003C/以避免此問題。

0

我用這個:

<div id="result" style="display:none"> 
    ${content} 
</div> 
<script type="text/javascript"> 
    window.parent.${param.popup_return}("${helpId}", dojo.byId("result").innerHTML); 
</script> 

這似乎很好地工作

0

您未使用JSTL這裏(最初標記爲只JSTL的問題)。您在模板文本中使用EL。它按照原樣打印。您希望使用JSTL核心<c:out>來轉義predefined XML entities(在此特定情況下也適用於HTML,引號位於轉義的XML實體中)。

window.parent.${param.popup_return}("<c:out value="${helpId}" />", "<c:out value="${content}" />"); 

的替代方案(如果你恨的是JSP語法高亮顯示或驗證錯誤/約嵌套的標籤/報價抽搐)是JSTL功能fn:escapeXml()

window.parent.${param.popup_return}("${fn:escapeXml(helpId)}", "${fn:escapeXml(content)}"); 
0

您是否嘗試過使用單引號代替雙引號?即將"${content}"更改爲'${content}'