2010-07-15 23 views
8

Ich benutze einen Wert von unserer Datenbank mit JSTL. Ich füge es direkt in ein Javascript ein, um es als Variable zu verwenden. Ich brauche die Ausgabe des Wertes, den die JSTL enthält, um es zu maskieren, weil es bei einfachen oder doppelten Anführungszeichen mein Skript unterbricht. Der Wert ist benutzerdefiniert.Ausgabe JSTL maskiert?

Beispiel:

Sie folgendermaßen vorgehen:

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

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

Würde tatsächlich am Ende aussehen wie:

<script type="text/javascript"> 
    var mayVar = 'Dale's Truck';//extra single quote breaks the JS 
</script> 

Also muss ich die JSTL var konvertieren entkommen sein wie „Dale% 27s Truck "bevor es zum JS kommt, weil es schon zu spät ist, wenn es zu meinem JS kommt, um es in JS machen zu können.

Antwort

12

Versuchen Sie es mit 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)}"/> 

oder Sie können den Apostroph mit einem Backslash:

<c:set var="replace" value="\\'" /> 

oder wenn Sie wollen nicht einmal, dass alles zu tun, und Sie sind sicher, dass die Zeichenfolge nicht doppelte Anführungszeichen enthalten, warum nicht:

var myVar = "${myVar}"; //string enclosed with double quotes instead of single quotes 

Aber wenn die Zeichenfolge doub hat Die Anführungszeichen, Sie müssen immer noch entkommen:

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

Das funktioniert, danke! Ich habe den doppelten Backslash-Ansatz anstelle von% 27 verwendet. – UpHelix

+2

Schreiben Sie niemals Ihre eigene Fluchtfunktion! Weil es falsch sein wird. Zum Beispiel schlägt das doppelte Backslash-Beispiel für die Eingabe "a b \\ 'c" fehl. Es wird in \\ 'umgewandelt, so dass der Backslash entfernt wird und das einfache Anführungszeichen die Zeichenfolge beendet. Verwenden Sie vorhandene Funktionen, die geprüft und debugged sind, z. var x = ' $ {myVar}'; –

0

Die andere Antwort wurde bereits akzeptiert, aber David Balazic machte einen großen Punkt. Die <spring:escapeBody> Funktion funktioniert am besten.

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