web-dev-qa-db-fra.com

JSTL échappant des caractères spéciaux

J'ai ce problème étrange avec des caractères spéciaux . Dans JSP, j'utilise le nom de champ comme identifiant et le nom peut ressembler à quelque chose comme:

id="<1 and &>2" (OR)
id="aaa & bbb"

Je n'ai pas d'autre option pour utiliser des identifiants que des noms, c'est la seule chose que je reçois du backend.

Alors, existe-t-il une logique permettant de supprimer tous les caractères spéciaux à l'aide de JSTL . Avec le scénario actuel, dans JS, je vais effectuer certaines opérations avec l'ID. cela cause de nombreux problèmes pour chaque type de navigateur.

S'il vous plaît suggérer, Merci d'avance ...

25
Max

Le JSTL fournit deux moyens d'échapper aux caractères spéciaux HTML:

<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core" %>
...
<c:out value="${myName}"/> 

et

${fn:escapeXml(myName)}

Les deux transformeront les caractères spéciaux en leurs entités HTML respectives: (< devient &lt;, & devient &amp;...).

Notez que les identifiants doivent être encodés en HTML, mais pas en JavaScript.

46
JB Nizet

Je pense que votre question a été mal comprise ... Je suis arrivé au même point que vous et j'ai résolu le problème avec excapeXml = "false" 

<c:out value="${id}" escapeXml="false"/> 

J'ai eu des données dans la base de données comme:

& lt; Hello World & gt;

et escapeXml = "false" l'a fait afficher

<Hello World>
20
James

Je pense que c'est ce que vous cherchez

Utilisez Spring HtmlUtils.htmlEscape (entrée de chaîne).

2
Ramesh PVK

Je viens de faire face à un scénario dans lequel je devais échapper, c’est-à-dire Single Quote, en dehors des caractères spéciaux. Dans ce cas, fn: escapeXml a échoué. J'ai donc utilisé JavaScriptUtils.javaScriptEscape () de Spring API, créé une balise et appliqué. Maintenant, le problème est résolu. J'ai également mentionné l'URL: http://www.coderanch.com/t/528521/JSP/Java/Passing-JSTL-variable-special-characters .

1
RKH