Bonjour la zone!
voila le probleme qui me trouble depuis qqes jours.
J’aimerais faire un filtre pour mes servlets, qui prend tous les parametres, et filtre les caracteres spéciaux (ex: accents, >, <, &, etc) pour les transformer dans leur valeur html (& par exemple).
Mais j’ai des gros problemes avec les accents, certainement un probleme d’encodage, et j’arrive pas a comprendre comment resoudre ce probleme.
j’ai beau essayer de forcer la requete a s’uniformiser en UTF-8, ou en ISO-8859-1, rien n’y fait, les acents deviennent un joli ?, et les > < sont eux par contre parfaitement filtres.
ou est ce que j’ai tout faux?
(je mets que les fonctions intéressantes)
ici, le filtre
[code]public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
//objet qui contient la methode filter, donnée dans l’autre code
Checker chk = new Checker();
Enumeration names = request.getParameterNames();
while (names.hasMoreElements())
{
// les affichages sont la pr debugger
System.out.println("rqst charset: "+request.getCharacterEncoding());
// je tente (en vain) d’uniformiser l’encodage des requetes
request.setCharacterEncoding(“ISO-8859-1”);
System.out.println("rqst charset: "+request.getCharacterEncoding());
while(names.hasMoreElements())
{
//et pour chaque attribut, je tente de filtrer.
String name = (String) names.nextElement();
System.out.println("name : "+ name);
String value = request.getParameter(name);
System.out.println("value : "+ value);
value = chk.filter(value);
System.out.println("filtered : "+ value);
request.setAttribute(name, value);
}
}
chain.doFilter(request, response);
}[/code]
et ici, la fonction String Filter(string) utilisée pour remplacer les caracteres spéciaux)
[code]public static String filter(String message)
{
if (message == null)
return (null);
char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i < content.length; i++)
{
switch (content[i])
{
case '<':
result.append("<");
break;
case '>':
result.append(">");
break;
case '&':
result.append("&");
break;
case '"':
result.append(""");
break;
case '€':
result.append("€");
break;
case 'À':
result.append("À");
break;
case 'Á':
result.append("Á");
break;
case 'Â':
result.append("Â");
break;
case 'Ä':
result.append("&Aunl;");
break;
case 'Å':
result.append("Å");
break;
case 'Æ':
result.append("&Aelig;");
break;
case 'Ç':
result.append("Ç");
break;
case 'È':
result.append("È");
break;
case 'É':
result.append("É");
break;
case 'Ê':
result.append("Ê");
break;
case 'Ë':
result.append("Ë");
break;
case 'Ì':
result.append("Ì");
break;
case 'Í':
result.append("Í");
break;
case 'Î':
result.append("Î");
break;
case 'Ï':
result.append("Ï");
break;
case 'Ñ':
result.append("Ñ");
break;
case 'Ò':
result.append("Ò");
break;
case 'Ó':
result.append("Ó");
break;
case 'Ô':
result.append("Ô");
break;
case 'Õ':
result.append("Õ");
break;
case 'Ö':
result.append("Ö");
break;
case 'Ù':
result.append("Ù");
break;
case 'Ú':
result.append("Ú");
break;
case 'Û':
result.append("Û");
break;
case 'Ü':
result.append("Ü");
break;
case 'Ý':
result.append("Ý");
break;
case 'ß':
result.append("ß");
break;
case 'à':
result.append("à");
break;
case 'á':
result.append("á");
break;
case 'â':
result.append("â");
break;
case 'ã':
result.append("ã");
break;
case 'ä':
result.append("ä");
break;
case 'å':
result.append("å");
break;
case 'æ':
result.append("æ");
break;
case 'ç':
result.append("ç");
break;
case 'è':
result.append("è");
break;
case 'é':
result.append("é");
break;
case 'ê':
result.append("ê");
break;
case 'ë':
result.append("ë");
break;
case 'ì':
result.append("ì");
break;
case 'í':
result.append("í");
break;
case 'î':
result.append("î");
break;
case 'ï':
result.append("ï");
break;
case 'ñ':
result.append("ñ");
break;
case 'ò':
result.append("ò");
break;
case 'ó':
result.append("ó");
break;
case 'ô':
result.append("ô");
break;
case 'õ':
result.append("õ");
break;
case 'ù':
result.append("ù");
break;
case 'ø':
result.append("ø");
break;
case 'ú':
result.append("ú");
break;
case 'û':
result.append("û");
break;
case 'ü':
result.append("ü");
break;
case 'ý':
result.append("ý");
break;
case 'ÿ':
result.append("ÿ");
break;
default:
result.append(content[i]);
}
}
return (result.toString());
}[/code]