Comment déterminer si un flux XML est codé en UTF8
6 messages • Page 1 sur 1
Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics
-

WebRankInfo - Administrateur du site

- Messages: 15912
- Inscription: Ven Avr 19, 2002 19:51
Comment déterminer si un flux XML est codé en UTF8
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.
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.
- 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);
}
Un fichier XML par défaut est en UTF-8, sinon il doit y avoir une spécification d'encodage du genre
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
<?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

- Messages: 15912
- Inscription: Ven Avr 19, 2002 19:51
@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
@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
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
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
6 messages • Page 1 sur 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 :
- Un (RSS) pour tous (les blogs officiels de Google)
- Google Enterprise a son blog
- Intégrer facilement un flux RSS externe
- Annuaire WRI : intégration des flux XML des inscrits
- Utiliser Actifpub pour l'intégration d'un flux RSS externe sur son site
- Le blog de Google Analytics
- Le blog officiel de Google Research
- Le blog officiel de Google au Japon
- Le blog officiel de Google Custom Search (CSE)
- Intégrer un flux RSS sur son site
Consultez la description détaillée des produits ou services de Google suivants : API Google Checkout
- Analyseur d'entête HTTP
Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée. - Déterminer l'âge d'un site
Cet outil vous permet de connaître une estimation de l'ancienneté d'un site : il fournit la date à laquelle Google l'a indexé la première fois (et la même chose pour archive.org).
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités





le forum