You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-fr@cocoon.apache.org by BRAUD Denis <DB...@micropole-univers.com> on 2005/11/07 18:52:50 UTC

form-encoding

Bonjour,

J'ai vu avec Cocoon que l'on peut positionner un form-encoding par défaut (web.xml : <param-name>form-encoding</param-name>).
Ce paramètre sert à initialiser la request (cf. CocoonServlet.getEnvironment : this.defaultFormEncoding).

Je rencontre des cas où cette définition par défaut n'est pas suffisante car je ne peux pas définir un form-encoding valable pour tous les terminaux qui utilisent ma webapp.

Pourquoi ne pas utiliser sur CocoonServlet.getEnvironment, le Http Header Accept-Charset pour déterminer le form-encoding (cf. méthode getFormEncoding ci après) ?

Denis

---------------------------------------------------------------
getFormEncoding

acceptCharset : récupéré via request.getHeader("Accept-Charset")
  Ce champs a 2 formes :
  -utf-8, utf-16, iso-8859-1, *
  -utf-8;q=1.0, utf-16;q=0.5, iso-8859-1, *

containerSupportedEncodings : Liste des encodings supportés par le container
  Pourrait venir de web.xml :
  <init-param>
    <param-name>container-supported-encodings</param-name>
    <param-value>utf-8,iso-8859-1</param-value>
  </init-param>

public static String getFormEncoding(
    String acceptCharset,
    List containerSupportedEncodings,
    String defaultFormEncoding) {
    if (containerSupportedEncodings == null || acceptCharset == null) {
        return defaultFormEncoding;
    }
    String formEncoding = null;
    String[] formEncodings = org.apache.commons.lang.StringUtils.split(
        acceptCharset, ",");
    for (int i = 0; i < formEncodings.length; i++) {
        formEncoding = formEncodings[i];
        int commaPos = formEncoding.indexOf(';');
        if (commaPos != -1) {
            formEncoding = formEncoding.substring(0, commaPos);
        }
        formEncoding = formEncoding.trim().toLowerCase();
        if (containerSupportedEncodings.contains(formEncoding)) {
            return formEncoding;
        }
    }
    return defaultFormEncoding;
}

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: form-encoding

Posted by Sylvain Wallez <sy...@apache.org>.
BRAUD Denis wrote:
> Bonjour,
>
> J'ai vu avec Cocoon que l'on peut positionner un form-encoding par défaut (web.xml : <param-name>form-encoding</param-name>).
> Ce paramètre sert à initialiser la request (cf. CocoonServlet.getEnvironment : this.defaultFormEncoding).
>
> Je rencontre des cas où cette définition par défaut n'est pas suffisante car je ne peux pas définir un form-encoding valable pour tous les terminaux qui utilisent ma webapp.
>
> Pourquoi ne pas utiliser sur CocoonServlet.getEnvironment, le Http Header Accept-Charset pour déterminer le form-encoding (cf. méthode getFormEncoding ci après) ?
>   

L'entête Accept-Charset est différent de l'encoding qui est nécessaire 
pour décoder les paramètres d'un formulaire.

Par exemple, une capture d'un POST dans Firefox me donne:
  Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
  Content-Type: application/x-www-form-urlencoded; charset=UTF-8

C'est le Content-Type qui donne la bonne info, et qui devrait être 
utilisé plutôt qu'une valeur en dur. Je me demande si les moteurs de 
servlets ne le prennent pas déjà en compte, auquel cas il faudrait que 
Cocoon s'en abstienne...

Au passage, IE 6 et Safari ne transmettent pas l'entête Accept-Charset...

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org