Filtrage des caracteres spéciaux pour Tomcat

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("&lt;");
			break;
		case '>':
			result.append("&gt;");
			break;
		case '&':
			result.append("&amp;");
			break;
		case '"':
			result.append("&quot;");
			break;
		case '€':
			result.append("&euro;");
			break;
		case 'À':
			result.append("&Agrave;");
			break;
		case 'Á':
			result.append("&Aacute;");
			break;
		case 'Â':
			result.append("&Acirc;");
			break;
		case 'Ä':
			result.append("&Aunl;");
			break;
		case 'Å':
			result.append("&Aring;");
			break;   
		case 'Æ':
			result.append("&Aelig;");
			break;
		case 'Ç':
			result.append("&Ccedil;");
			break;
		case 'È':
			result.append("&Egrave;");
			break;
		case 'É':
			result.append("&Eacute;");
			break;
		case 'Ê':
			result.append("&Ecirc;");
			break; 
		case 'Ë':
			result.append("&Euml;");
			break;
		case 'Ì':
			result.append("&Igrave;");
			break;	
		case 'Í':
			result.append("&Iacute;");
			break;
		case 'Î':
			result.append("&Icirc;");
			break;
		case 'Ï':
			result.append("&Iuml;");
			break;
		case 'Ñ':
			result.append("&Ntilde;");
			break;
		case 'Ò':
			result.append("&Ograve;");
			break;	
		case 'Ó':
			result.append("&Oacute;");
			break;	
		case 'Ô':
			result.append("&Ocirc;");
			break;
		case 'Õ':
			result.append("&Otilde;");
			break;
		case 'Ö':
			result.append("&Ouml;");
			break;
		case 'Ù':
			result.append("&Ugrave;");
			break;
		case 'Ú':
			result.append("&Uacute;");
			break;
		case 'Û':
			result.append("&Ucirc;");
			break;
		case 'Ü':
			result.append("&Uuml;");
			break;
		case 'Ý':
			result.append("&Yacute;");
			break;
		case 'ß':
			result.append("&szlig;");
			break;
		case 'à':
			result.append("&agrave;");
			break;
		case 'á':
			result.append("&aacute;");
			break;
		case 'â':
			result.append("&acirc;");
			break;	
		case 'ã':
			result.append("&atilde;");
			break;
		case 'ä':
			result.append("&auml;");
			break;
		case 'å':
			result.append("&aring;");
			break;
		case 'æ':
			result.append("&aelig;");
			break;
		case 'ç':
			result.append("&ccedil;");
			break;
		case 'è':
			result.append("&egrave;");
			break;
		case 'é':
			result.append("&eacute;");
			break;
		case 'ê':
			result.append("&ecirc;");
			break;
		case 'ë':
			result.append("&euml;");
			break;
		case 'ì':
			result.append("&igrave;");
			break;
		case 'í':
			result.append("&iacute;");
			break;
		case 'î':
			result.append("&icirc;");
			break;
		case 'ï':
			result.append("&iuml;");
			break;
		case 'ñ':
			result.append("&ntilde;");
			break;
		case 'ò':
			result.append("&ograve;");
			break;
		case 'ó':
			result.append("&oacute;");
			break;
		case 'ô':
			result.append("&ocirc;");
			break;	
		case 'õ':
			result.append("&otilde;");
			break;
		case 'ù':
			result.append("&ugrave;");
			break;
		case 'ø':
			result.append("&oslash;");
			break;
		case 'ú':
			result.append("&uacute;");
			break;	
		case 'û':
			result.append("&ucirc;");
			break; 
		case 'ü':
			result.append("&uuml;");
			break; 
		case 'ý':
			result.append("&yacute;");
			break;
		case 'ÿ':
			result.append("&yuml;");
			break;
			
		default:
			result.append(content[i]);
		}
	}
	return (result.toString());

}[/code]

petite suggestion tu as essayé les expressions regulieres en java pour filtrer tes caracteres speciaux ?
Ca serait plus simple que ta fonction.
Bussiere

j’amerais bien, mais je suis en train d’apprendre, et pour le moment, j’ai pas vu comment spécifier un caractere spécial. Mais j’y reflechis.
Le probleme, c’est que je me demande bien comment il reconnaitrait un caractere special, etant donné qu’il ne voit que ‘?’, donc caractere non reconnu B)

UPDATE : c’est réglé, mais je pense que c’est plus par l’intervention du St esprit qu’autre chose.

Soit c’est l’ajout d’un parametre ( -Dfile.encoding=ISO-8859-1 ) pour le lancement de la machine java,

soit la modification de server.xml et l’ajout de l’attribut useBodyEncodingForURI=“true” dans l’element connector.