IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Caractères accentués dans un responseXML


Sujet :

JavaScript

  1. #1
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut [AJAX] Caractères accentués dans un responseXML
    Bonjour à tous.
    lors de la lecture d'une réponse serveur suite à une requête Ajax, j'ai quelques soucis avec IE lorsque la réponse comporte des caractères accentués.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rue>Rue des écoliers</rue>
    Si cette balise est présente telle quelle, Opera et Firefox lisent correctement le document XML qui la contient et son capables de récupérer le noeud <rue>. Par contre, IE ne trouve rien.

    Si j'enlève le "é"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <rue>Rue des ecoliers</rue>
    IE accepte le XML.

    Il est évident que je ne peux pas interdire au client d'utiliser des caractères accentués. Comment faire pour forcer IE à lire le XML en ce cas ????

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    é est illégal en XML...

    Tu dois écrire &#00xyz ou xyz est le code ASCII de ton caractère.
    Tout caractère différent de [a-zA-Z0-9] doit être encodé de la sorte...

    Si FF n'en tient pas compte, il ne respecte plus les standards...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  3. #3
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Ha ça y est, je tiens la réponse : c'est le champ 'Content-Type' de l'en-tête HTTP qui indique à l'analyseur quel est le jeu de caractères. Si ce champ n'est pas renseigné, l'analyseur recevant un flux de type MIME "text/xml" attend de l'US-ASCII - ce qui correspond à ta réponse sur l'impossibilité d'utiliser des caractères accentués.

    La solution est donc [dans mon cas] d'inclure dans le PHP qui génère le flux XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header( 'Content-Type: text/xml;charset:ISO-8859-1' );
    Note annexe :
    J'avais essayé avec le champ 'encoding' du doctype, en vain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
    Normalement, le fait de spécifier comme type MIME "application/xml" devrait permettre d'outrepasser le réglage par défaut pour le charset, donc [je suppose, mais à vous de me dire si je ne raconte pas trop de bêtises] de valider le champ 'encoding' du doctype. Cependant, la plupart des serveurs web sont configurés avec un MIME-type "text/xml" pour les flux XML. Du coup, "application/xml" ne les impressionne pas plus que ça. Je pense qu'en configurant le serveur ou le .htaccess, on doit pouvoir outrepasser les valeurs par défaut du serveur. Je testerai à l'occasion...

  4. #4
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par Herode
    Ha ça y est, je tiens la réponse : c'est le champ 'Content-Type' de l'en-tête HTTP qui indique à l'analyseur quel est le jeu de caractères. Si ce champ n'est pas renseigné, l'analyseur recevant un flux de type MIME "text/xml" attend de l'US-ASCII - ce qui correspond à ta réponse sur l'impossibilité d'utiliser des caractères accentués.

    La solution est donc [dans mon cas] d'inclure dans le PHP qui génère le flux XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header( 'Content-Type: text/xml;charset:ISO-8859-1' );
    Note annexe :
    J'avais essayé avec le champ 'encoding' du doctype, en vain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
    Normalement, le fait de spécifier comme type MIME "application/xml" devrait permettre d'outrepasser le réglage par défaut pour le charset, donc [je suppose, mais à vous de me dire si je ne raconte pas trop de bêtises] de valider le champ 'encoding' du doctype. Cependant, la plupart des serveurs web sont configurés avec un MIME-type "text/xml" pour les flux XML. Du coup, "application/xml" ne les impressionne pas plus que ça. Je pense qu'en configurant le serveur ou le .htaccess, on doit pouvoir outrepasser les valeurs par défaut du serveur. Je testerai à l'occasion...
    Pourquoi changer de charset ? Tu n'étais pas bien avec UTF-8

    Pour ce qui est de ta question, je n'ai pas de réponse...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  5. #5
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Sisi, UTF-8 marche aussi comme charset

    Cela dit, je viens de faire un petit test dont le résultat me laisse perplexe.
    Le code PHP ci-dessous génère un flux XML bien reconnu par mes navigateurs de test (IE, Opera, Firefox) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header( 'Content-Type:text/xml;charset:UTF-8' );
    echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
    Mais le code suivant génère un flux XML non reconnu par IE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header( 'Content-Type:text/xml;charset:UTF-8' );
    echo "<?xml version='1.0' encoding='UTF-8'?>";

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Ben non, vu que "é" n'est pas un caractère valide pour UTF-8, il me semble...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  7. #7
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Si, heureusement. UTF-8 est un Unicode à longueur variable visant à économiser de la place (surtout pour les anglais, en fait ).

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Pour surpasser la valeur par défaut d'un serveur web, le header("..."); de PHP suffit amplement. Mettre application/xml comme type mime serait le plus valide. Mais faire une détection sur le navigateur (avec HTTP-ACCEPT) pour savoir ce qu'il supporte est à mon avis le mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $charsets = explode(',',$_SERVER['HTTP_ACCEPT_CHARSET']);
    if (in_array('UTF-8', $charsets))
      header('Content-Type:application/xml;charset:UTF-8');
    else
      header('Content-Type:text/xml;charset:ISO-8859-1');
    ?>
    Bon, c'est sommaire, et il n'y a pas de test sur le type mime accepté (via $_SERVER['HTTP_ACCEPT']), mais ça devrait marcher, ou être améliorer un chouïa pour tout prendre en compte.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Caractères accentués dans un richtextbox
    Par EricStrasbourg dans le forum VB.NET
    Réponses: 4
    Dernier message: 29/01/2007, 00h13
  2. [MySQL] Caractères accentués dans base de données MySQL
    Par enfin dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/01/2007, 20h54
  3. Réponses: 6
    Dernier message: 14/07/2005, 14h25
  4. Chaines avec caractères accentués dans interbase
    Par Tsimplice dans le forum Bases de données
    Réponses: 4
    Dernier message: 08/03/2004, 17h12
  5. Chaînes avec des caractères accentués dans Interbase
    Par François Marliac dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo