2010-07-15 1 views
8

JSTL을 사용하여 DB에서 값을 가져옵니다. 변수로 사용하려면 자바 스크립트에 바로 삽입하려고합니다. JSTL이 이스케이프 처리하기 위해 보유하고있는 값의 출력이 필요합니다. 작은 따옴표 나 큰 따옴표가 있으면 스크립트가 손상되기 때문입니다. 값은 사용자 지정입니다.출력 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에 탈출 할 수처럼 변환해야 "데일 %

다음을 수행 27s Truck "이 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 

을하지만 : 문자열이 큰 따옴표가 포함되지 않습니다, 왜하지 lee 따옴표를 붙이면 여전히 탈출해야합니다 :

+0

감사합니다. % 27 대신 이중 백 슬래시 방식을 사용했습니다. – UpHelix

+2

자신 만의 탈출 함수를 작성하지 마십시오! 왜냐하면 그것은 틀릴 것이기 때문입니다. 예를 들어 이중 백 슬래시 예제는 "a b \\ 'c"입력에 대해 실패합니다. \\ '로 변환되어 백 슬래시가 이스케이프 처리되고 작은 따옴표로 문자열이 끝납니다. 이미 입증되고 디버깅 된 기존 기능을 사용하십시오. var x = ' $ {myVar}'; –

0

다른 답변은 이미 받아 들였지만 David Balazic은 큰 도움이되었습니다. <spring:escapeBody> 기능이 가장 잘 작동합니다.

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