Bonjour,
J’ai installé la version 4.6.5 de Drupal et je veux aggréger le rss de
linuxfr.org (http://linuxfr.org/backend/news/rss20.rss) mais je suis face
à un problème d’encodage :
- Drupal semble supporter l’utf-8 correctement
- Le rss de linuxfr.org est en iso-8859-15
=> le résultat de l’aggrégation et de la conversion donne des résultats qui ne
sont pas ceux escomptés :-/, j’obtiens par exemple : «définitions» à la place
de «définitions».
Les questions sont donc :
-
Quelqu’un a-t-il ce genres de problèmes et si oui, les a-t-il résolu ?
J’ai cherché sur leur site, mais sans succès :-( -
Comment faire une bonne conversion de l’iso-8859-15 vers l’utf-8 sachant
que j’ai bien essayé avec iconv et mb_convert_encoding ? Je m’y suis peut-etre
mal pris !
Pour info je suis sous Debian / apache2 / php5 / postgresql 8 (Unicode)
Voilà, merci pour vos infos !
a+
Xavier
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Ca me parait bizzare… En effet, on obtient «définitions» à la place
de «définitions» lorsque on essaye de lire en iso-8859 un flux encodé en fait en utf8 (et non l’inverse).
Pouvez vous nous donner une url où l’on pourrait regarder ce qui se passe ?
Damien Tournoud
808
Salut,
Ca se passe par ici, c’est chez moi en test, alors merci de ne pas tenir
compte des articles :-)
http://pingoo.homelinux.org/ ?q=aggregator/sources/1
Merci,
Xavier
xfacq
4
Ok je confirme qu’il y a bien un problème, lié à une modification dans PHP5. Je vais regarder si le bug a été signalé ou pas encore.
Pour le corriger de manière temporaire, éditez includes/common.inc et modifiez la fonction drupal_xml_parser_create() :
<?php// Unsupported encodings are converted here into UTF-8.
$php_supported = array('utf-8', 'iso-8859-1', 'us-ascii');
if (!in_array(strtolower($encoding), $php_supported)) {
$out = drupal_convert_to_utf8($data, $encoding);
if ($out !== false) {
$data = $out;
$encoding = 'utf-8';
}
else {
watchdog('php', t("Could not convert XML encoding '%s' to UTF-8.", array('%s' => $encoding)), WATCHDOG_WARNING);
return 0;
}
}
?>
en ajoutant la ligne marquée ci-dessous :
<?php// Unsupported encodings are converted here into UTF-8.
$php_supported = array('utf-8', 'iso-8859-1', 'us-ascii');
if (!in_array(strtolower($encoding), $php_supported)) {
$out = drupal_convert_to_utf8($data, $encoding);
if ($out !== false) {
$data = $out;
$encoding = 'utf-8';
$data = ereg_replace('^(<\?xml[^>]+encoding)="([^"]+)"', '\1="utf8"', $data); // ** LIGNE A AJOUTER **
}
else {
watchdog('php', t("Could not convert XML encoding '%s' to UTF-8.", array('%s' => $encoding)), WATCHDOG_WARNING);
return 0;
}
}
?>
Est-ce que cela peut résoudre votre problème ?
Damien Tournoud
808
Nickel !!!
Ca fonctionne impéccable, j’ai bien tous les caractères accentués !
Ceci dit, ca parait super logique mais je n’ai pas eu l’idée de le faire :-p
Je t’invite à fournir un patch parce que je suis pas le seul à avoir eu le problème !
Encore merci, a+
Xavier
xfacq
4
Je n’ai pas de quoi faire un patch proprement ici (je ne suis pas chez moi). Si tu veux t’en charger, n’hésite pas !
Damien Tournoud
808
arff je sais pas comment vous fonctionnez pour faire vos patchs, donc dans
le doute j’en met un ici, et je te laisse ensuite seul maitre à bord pour un officiel,
tu le mérites bien :-D
--- includes/common.inc 2005-12-02 11:30:59.000000000 +0100+++ includes/common.inc 2006-02-14 22:02:30.000000000 +0100
@@ -1598,6 +1598,7 @@
if ($out !== false) {
$data = $out;
$encoding = 'utf-8';
+ $data = ereg_replace('^(<\?xml[^>]+encoding)="([^"]+)"', '\1="utf8"', $data);
}
else {
watchdog('php', t("Could not convert XML encoding '%s' to UTF-8.", array('%s' => $encoding)), WATCHDOG_WARNING);
Merci encore, a+
Xavier
xfacq
4
Voir http://drupal.org/node/49497
Damien Tournoud
808