web-dev-qa-db-fra.com

Comment échapper à une apostrophe ou à des citations sur un JSP (utilisé par JavaScript)

J'ai un formulaire d'utilisateur. Si l'utilisateur tape une chaîne avec ' ou " dans le cadre, je n'ai aucun problème. Le formulaire est soumis et enregistré correctement dans la base de données. Mon problème est lorsque je recharge la page (toutes les entrées peuvent être modifiées et sont chargées dans une liste du fichier JSP avant d'être affichées). En chargeant la page, je reçois une erreur disant:

missing ) after argument list 'Caroline's message', \n

Que dois-je faire pour échapper à cette chaîne pour l'afficher sur le frontal?

Voici le code que j'utilise sur le frontend pour lire les données et les stocker dans un objet JavaScript. Je ne sais pas trop où je dois m'échapper. Le champ à l'origine du problème est c.getComName:

communications[<%=i%>][1] = new CommObject('<%=c.getComId()%>', '<%=c.getComName()%>');

MISE À JOUR AVEC HTML GÉNÉRÉ:

communications[0][1] = new CommObject('101', 'Caroline's Message');
34
Caroline

Utilisez la fonction Apache StringEscapeUtils.escapeJavaScript .

Escapes the characters in a String using JavaScript String rules.

Escapes any values it finds into their JavaScript String form.
Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.)

So a tab becomes the characters '\\' and 't'.
22
Kevin Hakanson

Je préfère éviter les scripts au milieu de ma page et je devais les utiliser (de plus en plus souvent) pour échapper des chaînes lorsqu'elles étaient utilisées dans du code JavaScript. Je voulais un Expression Language (EL) moyen d'échapper aux chaînes. J'ai créé une très petite balise taglib que j'utilise uniquement à cette fin:

Utilities.Java:

package com.mycom.taglibs;

import org.Apache.commons.lang.StringEscapeUtils;

public class Utilities {
    public static String escapeJS(String value) {
        return StringEscapeUtils.escapeJavaScript(value);
    }
}

mytaglib.tld:

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://Java.Sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/j2ee http://Java.Sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">

  <description>My Tag Library</description>
  <display-name>Tag Utils</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>myt</short-name>

  <function>
    <description>
        JavaScript Escape function
    </description>
    <name>escapeJS</name>
    <function-class>com.mycom.taglibs.Utilities</function-class>
    <function-signature>Java.lang.String escapeJS(Java.lang.String)</function-signature>
  </function>
</taglib>

Et, dans la page JSP:

<%@ taglib prefix="myt" uri="/WEB-INF/mytaglib.tld" %>
The escaped string is: ${myt:escapeJS(variableHoldingTheString)}
47
RHSeeger

fn: escapeXml ne fonctionne pas en JavaScript. Il remplace 'par # & 0039; provoque toujours une erreur lors de l'exécution du JavaScript.

Seulement échapper de la manière JavaScript est correct:\'

La fonction Apache StringEscapeUtils.escapeJavaScript le fait pour vous. Créer une balise pour cela facilite grandement les choses.

3
Radboud

Vous pouvez utiliser la fonction d'échappement JSTL fn:escapeXml() pour supprimer les anomalies dues à des guillemets simples (`) . L'exemple suivant montre la différence.

Par exemple: 

<c:set var="string1" value="This is abc's first String."/>
<c:set var="string2" value="This is abc's second String."/>

<p>With escapeXml() Function:</p>
<p>string (1): ${fn:escapeXml(string1)}</p>

<p>Without escapeXml() Function:</p>
<p>string (2): ${fn:escapeXml(string2)}</p>

R&EACUTE;SULTAT

string (1): il s'agit du premier String de abc. 

string (2): C'est la deuxième chaîne d'abc.

0
boniezuvyz

Lorsque vous renvoyez le code HTML de la classe CommObject, ajoutez le "au lieu de" et avant le nom (par exemple, le message de Caroline)

Comme ceci: retourne "\" "+ comName +"\"";

0
amischiefr