Encoding a string using html entities

Soyez le premier à donner votre avis sur cette source.

Snippet vu 21 992 fois - Téléchargée 17 fois

Contenu du snippet

Si vous saisissez du texte dans un formulaire HTML et que ce texte contient des caractères spéciaux, ceux-ci doivent être convertis en entités HTML (par exemple le caractère 'é' est converti en "é") si vous souhaitez sauvegarder ce texte dans une BD et le réafficher ensuite dans une page Web.
La classe HTMLEncoder est un Bean, utilisable dans une JSP avec la balise :
<jsp:useBean id="convertisseur" class="Beans.HTMLEncoder" scope="session"/>
La conversion se fait en utilisant une collection de type Map qui établit la correspondance entre les caractères spéciaux et les entités HTML.

Source / Exemple :


import java.util.*;
public class HTMLEncoder {
   private static Map mapChar2HTMLEntity;   
   private final static char [] characters = {
      'Ü', 'Ä', 'Ö', 'Ë', 'Ç', 'Æ', 'Å', 'Ø', 
      'ü', 'ä', 'ö', 'ë', 'ç', 'å', 'ø', '`', 'à', 'è', 'ì', 'ò', 'ù',
      '&', 'ß', ' ', '>', '<', 
      '©', '¢', '£', '«', '»', '®', '-', '\'',
      'á','ú','ó','é','í','ñ','§','è','î','ô','â','û','ê',
      'æ','¡','\"','ª','×','°','?','¦'
   }; 
   private final static String[] entities = {
       "Ü","Ä","Ö","Ë","Ç","Æ","Å","Ø",     "ü","ä","ö","ë","ç","å","ø","&grave;","à","è","ì","ò","ù",
       "&amp;","ß","&nbsp;",">","<",
       "©","¢","£","«","»","®","·","´",     "á","ú","ó","é","í","ñ","§","è","î","ô","â","û","ê",
       "æ","¡","&quot;","ª","×","°","€","¦"
  };  
  public HTMLEncoder() {
     mapChar2HTMLEntity= new HashMap();
     int longueur = characters.length;
     for (int i = 0; i < longueur; i++) mapChar2HTMLEntity.put(new Character(characters[i]), entities[i]);
  }	  
   public String encode(String s) {
     int longueur = s.length();
     final StringBuffer sb = new StringBuffer(longueur * 2);
     char ch;
     for (int i =0; i < longueur ; ++i) {
       ch = s.charAt(i);
       if ((ch >= 63 && ch <= 90) || (ch >= 97 && ch <= 122)) sb.append(ch);
       else {
	 String ss = (String)mapChar2HTMLEntity.get(new Character(ch));
	 if(ss==null) sb.append(ch); else sb.append(ss);
       }
     }
     return sb.toString();
   }
 }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
5348
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 mars 2020
95
Salut,

pour lui limite tu t'en fou il reste portable, mais si tu veux unifier faut faire : '\u005C\u0027', il faut l'echaper avec \ mais au format unicode ^^
Messages postés
1
Date d'inscription
jeudi 14 juin 2007
Statut
Membre
Dernière intervention
15 juin 2007

Merci pour cette proposition. J'ai utilisé l'utilitaire charmap de Windows
Par contre, le caractère quote ne peut être remplacé par son littéral unicode car le compilateur ne s'y retrouve plus !!!

import java.util.*;
public class HTMLEncoder {
private static Map mapChar2HTMLEntity;
private final static char [] characters = {
'\u00DC', '\u00C4', '\u00D6', '\u00CB', '\u00C7', '\u00C6', '\u00C5', '\u00D8',
'\u00FC', '\u00E4', '\u00F6', '\u00EB', '\u00E7', '\u00E5', '\u00F8', '\u0060', '\u00E0', '\u00E8', '\u00EC', '\u00F2', '\u00F9',
'\u0026', '\u00DF','\u00A0', '\u003E', '\u003C',
'\u009A', '\u00A2', '\u00A3', '\u00AB','\u00BB','\u00AE','\u00AD','\'',
'\u00E1','\u00FA','\u00F3','\u00E9','\u00ED','\u00F1','\u00A7','\u00E8','\u00EE','\u00F4','\u00E2','\u00FB','\u00EA',
'\u00E6','\u00A1','\u0022','\u00AA','\u00D7','\u00B0','\u20AC','\u007C','\u00B5','\u00BA','\u00F7','\u00B2','\u00B3',
'\u00B1'
};
private final static String[] entities = {
"Ü","Ä","Ö","Ë","Ç","Æ","Å","Ø",
"ü","ä","ö","ë","ç","å","ø","`","à","è","ì","ò","ù",
"&","ß"," ",">","<",
"©","¢","£","«","»","®","·","´",
"á","ú","ó","é","í","ñ","§","è","î","ô","â","û","ê",
"æ","¡",""","ª","×","°","€","¦","µ","º","÷","²","³",
"±"
};
public HTMLEncoder() {
mapChar2HTMLEntity= new HashMap();
int longueur = characters.length;
for (int i = 0; i < longueur; i++) mapChar2HTMLEntity.put(new Character(characters[i]), entities[i]);
}
public String encode(String s) {
int longueur = s.length();
final StringBuffer sb = new StringBuffer(longueur * 2);
char ch;
for (int i =0; i < longueur ; ++i) {
ch = s.charAt(i);
if ((ch >= 63 && ch <= 90) || (ch >= 97 && ch <= 122)) sb.append(ch);
else {
String ss = (String)mapChar2HTMLEntity.get(new Character(ch));
if(ss==null) sb.append(ch); else sb.append(ss);
}
}
return sb.toString();
}
}
Messages postés
5348
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 mars 2020
95
Salut,

tu devrais changer les char de ton tableau 'characters' avec les valeurs unicode sinon si tu passes le source d'un windows vers un linux et réciproquement ton tableau sera vite pourrir à cause de la différence d'encodage... et sera inutilisable.

tu trouveras sur le lien ci-dessous, un applet contenant les codes unicode que tu utilises :
http://mindprod.com/applets/unicode.html

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.