Si il y a bien un problème récurant en développement, c’est celui de l’encodage des caractères. On attend avec impatience le support de l’unicode avec PHP 6.… En J2EE, il n’y à pas le choix, il faut coder des filtre, à moins que je sois passé à côté de la solution miracle.
Une solution avec un filtre de servlet fourni par Seb qui fonctionne pour n’importe quel encodage:
1°) Il faut écrire un filtre de servlet qui va réencoder le flux avant envoi au client :
Code (java)- import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- public class EncodingFilter implements javax.servlet.Filter {
- private String encoding;
- public void init(FilterConfig filterConfig) throws ServletException {
- this.encoding = filterConfig.getInitParameter("encoding");
- }
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
- request.setCharacterEncoding(encoding);
- filterChain.doFilter(request, response);
- }
- public void destroy() {
- }
- }
2°) Il faut ensuite faire appel à ce filtre par l’intérmediaire d’un mapping dans le fichier web.xml comme suit :
- <filter> <filter-name>Encoding Filter</filter-name>
- <filter-class>EncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>Encoding Filter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
Maintenant toutes les requêtes sont correctements lues avec l’encodage UTF-8.
Le filtre fonctionne tout autre encodage.
Une autre solution consiste à utiliser le servlet filter CharacterEncodingFilter
dans le fichier web.xml afin de forcer l’encodage. Il est important de mettre ce filtre en premier dans la liste.
- <web-app><filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- </web-app>
Voilà tout ! Pour ma part, j’ai utilisé la première solution qui à résolu pas mal de mes soucis au niveau des formulaires de saisies d’informations.