Comment échapper JavaScript JSP?
Je suis totalement bloqué sur ce, je vais essayer d'échapper à une apostrophe dans une JSP. J'ai des données que je suis sortie directement en JS chaîne et les guillemets simples semblent être à l'origine de problèmes.
Voici mon 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>
Et voici le résultat que Im obtenir:
var itemNameList ='
Weyland Estate Santa Barbara Pinot Noir
Raymond \/'Prodigal\/' North Coast Cabernet Sauvignon
Chateau Haute Tuque';
Mais c'est faux, et j'ai juste besoin de /'Prodigal'/
ou pas de guillemets simples!
MODIFIER: Ou j'ai réellement besoin d'échapper les guillemets avec \
barre oblique inverse?
OriginalL'auteur jrutter | 2012-03-14
Vous devez vous connecter pour publier un commentaire.
La barre oblique n'est pas un caractère d'échappement. C'est la barre oblique inverse.
(oui, il a été présenté deux fois, parce que c'est aussi un caractère d'échappement en Java!)
Cependant, vous n'avez pas seulement besoin de repace
'
par\'
, vous devez également remplacer\n
(retours à la ligne) par\\n
. La chaîne est imprimé sur plusieurs lignes, ce qui en fait également un invalide JS variable de chaîne. Votre résultat final doit fondamentalement ressembler à ceci:(veuillez noter que la syntaxe surligneur est d'accord sur moi ici, mais pas sur le vôtre)
Il y a cependant beaucoup plus possible des caractères spéciaux qui doit être échappé. Ils sont tous couverts par Apache Commons Lang
StringEscapeUtils#escapeEcmaScript()
. Beaucoup plus facile est de créer un personnalisé EL fonction qui appelle exactement cette méthode. Si pas encore fait, téléchargez et déposezcommons-lang.jar
dans/WEB-INF/lib
. Puis créer un/WEB-INF/functions.tld
fichier comme suit:De sorte que vous pouvez l'utiliser comme suit:
Vous êtes les bienvenus.
Le printemps est prêt à l'emploi de la balise: s:escapeBody , donc si vous êtes à l'aide de Printemps, vous pouvez l'utiliser sans définir ses propres balises personnalisées.
OmniFaces a aussi: de:escapeJS
s:escapeBody doit être distincte réponse @DavidBalažic
OriginalL'auteur BalusC