Aggregator & encoding

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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

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

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

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

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