Comment déterminer si un flux XML est codé en UTF8

Discussion dans 'Administration d'un site Web' créé par WebRankInfo, 3 Avril 2005.

Tags:
  1. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    20 760
    J'aime reçus:
    800
    Tout est dans le titre (eh oui, c'est mieux de bien choisir les titres...) : je cherche à savoir comment déterminer de manière automatique si un flux XML (RSS ou Atom) est codé en UTF8 (auquel cas je dois appliquer la fonction utf8_decode).

    J'imagine que la question serait la même pour l'analyse d'une page HTML mais là je rencontre ce problème sur un flux XML.
     
  2. Orion33
    Orion33 WRInaute discret
    Inscrit:
    20 Août 2004
    Messages:
    183
    J'aime reçus:
    0
    Code:
    function is_utf8($string) {
      
       // From http://w3.org/International/questions/qa-forms-utf-8.html
       return preg_match('%^(?:
             [\x09\x0A\x0D\x20-\x7E]            # ASCII
           | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
           |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
           | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
           |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
           |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
           | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
           |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
       )*$%xs', $string);
      
    }
     
  3. spijoelx
    spijoelx WRInaute discret
    Inscrit:
    6 Février 2004
    Messages:
    202
    J'aime reçus:
    0
    sinon en analysant les headers que renvoit le serveur distant, logiquement il renvoit Content-Type: text/html; charset=utf8 si c'est en utf8 dans le header.
     
  4. shrom
    shrom WRInaute impliqué
    Inscrit:
    5 Juillet 2004
    Messages:
    781
    J'aime reçus:
    0
    Un fichier XML par défaut est en UTF-8, sinon il doit y avoir une spécification d'encodage du genre
    Code:
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    S'il n'y a pas d'encodage précisé et que celui-ci n'est pas en UTF-8, le fichier XML n'est pas valide.

    Sinon, il y a cette fonction PHP pour déterminer si un fichier est en UTF-8
    Code:
    function seems_utf8($Str) {
            for ($i=0; $i<strlen($Str); $i++) {
                if (ord($Str[$i]) < 0x80) $n=0; # 0bbbbbbb
                elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
                elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
                elseif ((ord($Str[$i]) & 0xF0) == 0xF0) $n=3; # 1111bbbb
                else return false; # Does not match any model
      
                for ($j=0; $j<$n; $j++) { # n octets that match 10bbbbbb follow ?
                    if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80)) return false;
                }
            }
            return true;
        }
     
  5. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    20 760
    J'aime reçus:
    800
    @Orion33 et shrom : merci pour les fonctions, je les utiliserai sans doute dans d'autres cas.

    @spijoelx : non, j'ai trouvé des exemples de fichiers UTF-8 où le header ne contient pas charset=utf8

    @shrom : merci pour ta 1ère réponse pleine de bon sens, effectivement il suffit que je récupère l'attribut encoding de la balise xml.

    Je vais chercher dans magpierss-0.71.1 (version que je n'avais pas encore installée) si l'info de l'encodage est accessible via magpierss. En fait je suis étonné de voir que j'ai besoin de me préoccuper de ce décodage sachant que j'utilise magpierss (je dois faire un truc de travers sans doute).

    edit : c'est bon ça marche maintenant... ma version de magpierss était trop vieille peut-être
     
  6. chantra
    chantra WRInaute discret
    Inscrit:
    27 Juin 2005
    Messages:
    225
    J'aime reçus:
    0
    il me semble que la librairie DOM de php5 gere le XML en UTF-8 nativement.
    Donc, lorsque l'on parse un fichier encode en windows-1251 par exemple, la classe DomDocument renvoit du utf-8 et il faut appliquer utf8_decode pour le transformer en ISO-8859-1
     
Chargement...
Similar Threads - déterminer flux XML Forum Date
Outil pour déterminer délai mise en cache navigateur Développement d'un site Web ou d'une appli mobile 8 Juin 2022
Comment déterminer qui a la paternité du Duplicate Content ? Débuter en référencement 13 Mars 2017
Okaprix : un siteweb pour déterminer le prix de votre smartphone Demandes d'avis et de conseils sur vos sites 18 Juin 2015
Meilleur outils pour déterminer des bons mots clés Débuter en référencement 16 Février 2014
déterminer une date Google Analytics 24 Novembre 2013
Comment determiner la valeur d'un backlink? Netlinking, backlinks, liens et redirections 1 Septembre 2013
Comment déterminer l'heure exacte d'une visite sur Analytics ? Google Analytics 30 Juin 2013
Comment déterminer le Coût d'Acquisition Clients ? AdWords 27 Octobre 2012
Déterminer le prix d'un service de référencement manuel Tests et études de cas 20 Novembre 2011
Déterminer la bonne anciennété d'un site Débuter en référencement 6 Octobre 2011
Déterminer groupes d'annonces + utilité du nom de la marque AdWords 31 Mars 2011
Comment déterminer le "pouvoir" d'un lien ? Débuter en référencement 6 Janvier 2011
Comment déterminer la présence de nouveaux backlinks ? Débuter en référencement 15 Septembre 2010
Déterminer pourquoi un site est bien placé Problèmes de référencement spécifiques à vos sites 11 Août 2010
Déterminer un style pour toutes les div commençant par "ident" Développement d'un site Web ou d'une appli mobile 16 Février 2010
Outil pour déterminer la concurrence Référencement Google 22 Décembre 2009
Determiner la valeur financière d'un site Monétisation d'un site web 6 Mars 2009
Comment déterminer le prix de référencement d 'un site ? Débuter en référencement 27 Octobre 2008
Déterminer le nombre de lien internes/externes par page Débuter en référencement 13 Mai 2008
Outil pour determiner la dépendance à google ? Développement d'un site Web ou d'une appli mobile 23 Septembre 2007