Wie kann JavaScript in JSP entkommen?



string escaping (1)

Der Schrägstrich ist kein Escape-Zeichen. Das ist der Backslash.

${fn:replace(Desc, "'", "\\'")}

(Ja, es wurde zweimal präsentiert, weil das auch ein Escape-Zeichen in Java ist!)

Sie müssen jedoch nicht nur "nach" zurückspeichern ' sondern müssen auch \n (Zeilenumbrüche) durch \\n ersetzen. Die Zeichenkette wurde über mehrere Zeilen gedruckt, was sie auch zu einer ungültigen JS-Zeichenkettenvariable macht. Ihr Endergebnis muss grundsätzlich so aussehen:

var itemNameList = ''
    + '\nWeyland Estate Santa Barbara Pinot Noir'
    + '\nRaymond \'Prodigal\' North Coast Cabernet Sauvignon'
    + '\nChateau Haute Tuque'; 

(Bitte beachten Sie, dass der Syntax-Highlighter hier mit mir übereinstimmt, aber nicht mit Ihrem)

Es gibt jedoch viel mehr mögliche Sonderzeichen, die maskiert werden müssen. Sie werden alle von Apache Commons Lang StringEscapeUtils#escapeEcmaScript() . Viel einfacher ist es, eine benutzerdefinierte EL-Funktion zu erstellen, die genau diese Methode aufruft. Falls noch nicht geschehen, commons-lang.jar in /WEB-INF/lib herunter. Dann erstellen Sie eine /WEB-INF/functions.tld Datei wie folgt:

<?xml version="1.0" encoding="UTF-8" ?>
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">

    <display-name>Custom Functions</display-name>    
    <tlib-version>1.0</tlib-version>
    <uri>http://example.com/functions</uri>

    <function>
        <name>escapeJS</name>
        <function-class>org.apache.commons.lang3.StringEscapeUtils</function-class>
        <function-signature>java.lang.String escapeEcmaScript(java.lang.String)</function-signature>
    </function>
</taglib>

Damit können Sie es wie folgt verwenden:

<%@taglib prefix="util" uri="http://example.com/functions" %>
...
${util:escapeJS(Desc)}

Ich bin total dabei, ich versuche, einem einzelnen Zitat in einer JSP zu entkommen. Ich habe einige Daten, die ich direkt in eine JS-Zeichenfolge ausgibt, und die einfachen Anführungszeichen scheinen Probleme zu verursachen.

Hier ist mein Code:

<dsp:droplet name="/atg/dynamo/droplet/ForEach">
  <dsp:param value="${CommerceItems}" name="array" />
  <dsp:param name="elementName" value="CommerceItem" />
  <dsp:oparam name="outputStart">
    var itemNameList ='
  </dsp:oparam>
  <dsp:oparam name="output">
    <dsp:getvalueof id="Desc" param="CommerceItem.auxiliaryData.productRef.displayName">
      ${fn:replace(Desc, "'", "\\/'")}
    </dsp:getvalueof>
  </dsp:oparam>
  <dsp:oparam name="outputEnd">';</dsp:oparam>
</dsp:droplet>

Und hier ist die Ausgabe, die ich bekomme:

var itemNameList ='
Weyland Estate Santa Barbara Pinot Noir
Raymond \/'Prodigal\/' North Coast Cabernet Sauvignon
Chateau Haute Tuque'; 

Aber das ist falsch, und ich brauche nur /'Prodigal'/ oder gar keine einfachen Zitate!

EDIT : Oder ich muss Zitate mit \ rückwärts Schrägstrich fliehen?





escaping