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

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 15912
Inscription: Ven Avr 19, 2002 19:51

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

Message le Dim Avr 03, 2005 19:10

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.

Orion33
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 234
Inscription: Ven Aoû 20, 2004 12:06

Message le Dim Avr 03, 2005 19:31

Code: Tout sélectionner
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);
 
}

spijoelx
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 249
Inscription: Ven Fév 06, 2004 20:04

Message le Dim Avr 03, 2005 19:40

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.

shrom
WRInaute passionné
WRInaute passionné
 
Messages: 865
Inscription: Lun Juil 05, 2004 22:37

Message le Dim Avr 03, 2005 21:04

Un fichier XML par défaut est en UTF-8, sinon il doit y avoir une spécification d'encodage du genre
Code: Tout sélectionner
<?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: Tout sélectionner
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;
    }


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 15912
Inscription: Ven Avr 19, 2002 19:51

Message le Dim Avr 03, 2005 21:24

@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


chantra
WRInaute impliqué
WRInaute impliqué
 
Messages: 257
Inscription: Lun Juin 27, 2005 19:12

Message le Jeu Déc 15, 2005 14:53

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


Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par Julien Coquet, expert certifié officiellement par Google Analytics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités