Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

[Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
Mustangv8
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 11 Avr 2005
Messages: 179
Localisation: Canada

URL permanente de ce messagePosté le : Mar Mai 27, 2008 14:53    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

J'ai un annuaire RSS en anglais qui tourne trés bien depuis des années et j'ai récemment crée son équivalent en francais mais j'ai des problemes avec l'affichage des accents.
Les flux encodés en UTF-8 passent trés bien mais pas ceux encodés en ISO-8859-1. Y a t il un moyen pour que les deux types de flux puissent etre affichés correctement?
L'annuaire est accessible depuis mon www et vous pouvez cliquer sur le premier flux dans le bloc Populaires pour voir ce que ca donne.
Il semble aussi qu'il y a une fonction qui doit convertir le ISO en UTF. Serais ce un probleme de serveur ou de code?
Voici ce que j'ai pu localiser:
Code:
$data = $rssinfo['data'];
     if (!$rssinfo['utf8']) {
       preg_match("#.*?encoding=[\'\"](.*?)[\'\"].*#si", $data, $tag);
         $encoding = (isset($tag[1]) ? strtoupper($tag[1]) : 'ISO-8859-1');
         if (function_exists('mb_detect_encoding') && function_exists('mb_convert_encoding') && function_exists('mb_decode_numericentity')) {
           $coding = mb_detect_encoding($data);
           $data = mb_convert_encoding($data,"UTF-8","$coding,$encoding,ISO-8859-2,auto");
          if ($coding != "ASCII") $data = mb_decode_numericentity($data, $convmap, 'UTF-8');
       }elseif(function_exists('iconv')) {
           $data = iconv($encoding, 'UTF-8', $data);
       }else{
           $data = utf8_encode($data);
       }
   }


Quelqu'un a t il une idée?


Dernière édition par Mustangv8 le Mar Mai 27, 2008 22:30; édité 1 fois
 
Mustangv8 Visiter le site web du posteur
jcaron
WRInaute passionné
WRInaute passionné

Inscrit le: 13 Fév 2004
Messages: 523
Localisation: Paris

URL permanente de ce messagePosté le : Mar Mai 27, 2008 15:57    Sujet du message: Re: Afficher flux RSS en UTF-8 et ISO-8859-1

Mustangv8 a écrit:
Les flux encodés en UTF-8 passent trés bien mais pas ceux encodés en ISO-8859-1.
[...]
Il semble aussi qu'il y a une fonction qui doit convertir le ISO en UTF. Serais ce un probleme de serveur ou de code?


A priori:
- le flux reçu est en ISO-8859-1, et le dit bien dans son tag <?xml>
- tu envoies les choses en UTF-8
- le bout de code indiqué doit bien faire la conversion vers UTF-8 quand c'est nécessaire.

Note cependant que:
- le code essaie de voir si toutes sortes de fonctions existent (mb_detect_encoding, mb_convert_encoding, mb_decode_numericentity), et les utilise si elles sont présentes
- sinon il se rabat sur "iconv" si elle est présente
- sinon il se rabat sur utf8_encode

Normalement avec tout ça ça devrait marcher à tous les coups, mais tu peux voir si les fonctions correspondantes sont présentes ou pas dans ton install, et si ça change quelque chose avec ou sans.

Sinon la grande question c'est de savoir s'il utilise effectivement ce bout de code, et là, la seule solution c'est d'ajouter des traces pour voir s'il y passe ou pas (et/ou dans quelles parties il passe et/ou les valeurs des différentes variables au fur et à mesure).

Jacques.
 
jcaron Visiter le site web du posteur
serval2a
WRInaute accro
WRInaute accro

Inscrit le: 21 Mar 2005
Messages: 3210
Localisation: A la poursuite de Googlebot.

URL permanente de ce messagePosté le : Mar Mai 27, 2008 16:04    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

Salut,
A priori, car je ne connais pas le reste du script, tu peux essayer de remplacer ton code par
Code:
$data = utf8_encode($rssinfo['data']);

Etant dit que si me souviens bien la fonction n'aura un effet que si la chaîne data n'est pas en UTF-8.
Sinon comme je te l'avais indiqué par ailleurs le plus simple est de faire l'inverse c-a-d mettre ton charset en iso (parce qu'on est en zone iso et que t'auras un max de flux dans ce langage) et remplacer ton code par un truc comme cela :
Code:
$data = utf8_decode($rssinfo['data']);

Là la fonction ne produira d'effet que si la chaîne data est en UTF-8.
@+
 
serval2a Visiter le site web du posteur
jcaron
WRInaute passionné
WRInaute passionné

Inscrit le: 13 Fév 2004
Messages: 523
Localisation: Paris

URL permanente de ce messagePosté le : Mar Mai 27, 2008 16:41    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

serval2a a écrit:
Salut,
A priori, car je ne connais pas le reste du script, tu peux essayer de remplacer ton code par
Code:
$data = utf8_encode($rssinfo['data']);

Etant dit que si me souviens bien la fonction n'aura un effet que si la chaîne data n'est pas en UTF-8.


Pas vraiment, non, elle va ré-encoder à nouveau, et ça faire des choses par jolies genre é un peu partout Sad

Ah ben tiens d'ailleurs j'avais pas ouvert les yeux, c'est le cas dans le flux en question, ce qui signifie qu'il y deux encodages ISO->UTF-8 successifs. Faut en virer un Smile

serval2a a écrit:
Sinon comme je te l'avais indiqué par ailleurs le plus simple est de faire l'inverse c-a-d mettre ton charset en iso (parce qu'on est en zone iso et que t'auras un max de flux dans ce langage) et remplacer ton code par un truc comme cela :
Code:
$data = utf8_decode($rssinfo['data']);

Là la fonction ne produira d'effet que si la chaîne data est en UTF-8.
@+


Quelle drôle d'idée... Il faut encourager tout le monde à passer en UTF-8, pas l'inverse! Qui te dit qu'il n'aura pas un site avec des flux en polonais, en russe, en arabe ou en japonais le mois prochain?

Et même pour du français, il y a tellement de confusion entre ISO-8859-1, ISO-8859-15 et windows-1252 (au moins) que même le symbole € risque de ne pas passer dans de nombreux cas...

Jacques.
 
jcaron Visiter le site web du posteur
Mustangv8
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 11 Avr 2005
Messages: 179
Localisation: Canada

URL permanente de ce messagePosté le : Mar Mai 27, 2008 16:59    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

Citation:
Note cependant que:
- le code essaie de voir si toutes sortes de fonctions existent (mb_detect_encoding, mb_convert_encoding, mb_decode_numericentity), et les utilise si elles sont présentes
- sinon il se rabat sur "iconv" si elle est présente
- sinon il se rabat sur utf8_encode
Normalement avec tout ça ça devrait marcher à tous les coups, mais tu peux voir si les fonctions correspondantes sont présentes ou pas dans ton install, et si ça change quelque chose avec ou sans.


Tu veux dire que ces fonctions doivent etre installées dans le serveur en tant que modules php? Ou est-ce des scripts extérieurs a installer?

Serval, j'ai essayé de changer le code comme tu as dit mais il n'y a eu aucun changement.

Jacques a raison, 90% des flux (tous francais) dans l'annuaire sont en UTF-8. C'est les 10% restants qui me posent un probleme.

J'avoue que je suis completement perdu quand il faut modifier du php.

Voici tout le contenu de ce fichier au cas ou ca vous aide.
Merci a tous les deux
Wink
Code:

<?php
/*********************************************
  ********************************************
  RSS Feeds Version 2.3-
   -Added ability to select an existing block to display if admin chooses instead of typing text for header and footer blocks.
   -Added ability to import feeds from CPG Headlines database
   -Added ability to export feed to CPG Headlines database.
   -Changed view formatting to get rid of the showing title and descriptions twice for each feed.
   -Better Atom support
   -Gave admin ability to clear all feed caches
   -Added ability for admin to refresh feed's cache (Deletes the feed's stored cache and recreates with current feed info)
   -Admins now see the parsed feed to assist in approving.
   -Added preview a feed prior to submitting.
   -Users and admins now only have to enter the url to submit a feed.  The feed is parsed and Title and descriptions autopopulate with the feeds info.
   -Fixed printer friendly format
   -Fixed top and new table formatting again...
   -Added Editor's pick block and ability for admin to change which feed shows
   -A small cache fix
   -Ability to change number of displayed items in random view block.
   -Ability to change number of displayed items per feed
   -Removed formating of parsed feed from parser and put the formating into index.php
   -Each field is not output from parser as individual array values rather than one long formated string
   -Added check for URL already exists during feed submission and admin entry
   -More encoding/decoding/parsing fixes
   -if-modified conditional get fix
   -Show new location if 302 or 301 received
   -Fixed xml error reporting in validate xml   
      
      Modified by Jordo 5/13/05.
   
   ********************************************
   RSS Module
  ********************************************
  Copyright © 2004 - 2005 by Richard Jordan (Jordo)
  http://www.jordomedia.com   
   ********************************************/

if (!defined('CPG_NUKE')) { exit; }

function startElement($parser, $name, $attrs) {
   global $insideitem, $tag, $insidechannel, $insidefeed, $insideimage, $insideentry;
   
   if ($insidefeed) {
      $tag = $name;
   } elseif ($name == "FEED") {
      $insidefeed = true;
   }
   if ($insidechannel) {
      $tag = $name;
   } elseif ($name == "CHANNEL") {
      $insidechannel = true;
   }
   if ($insideitem) {
      $tag = $name;
   } elseif ($name == "ITEM") {
      $insideitem = true;
   }
   if ($insideimage) {
      $tag = $name;
   } elseif ($name == "IMAGE") {
      $insideimage = true;
   }
   if ($insideentry) {
      $tag = $name;
   } elseif ($name == "ENTRY") {
      $insideentry = true;
   }
}

function endElement($parser, $name) {
   global $insideitem, $tag, $eurl, $ptitle, $pdescription, $item_count, $plink, $ppubdate, $insidechannel, $insidefeed, $itemdata, $insideimage, $insideentry, $purl, $pwidth, $pheight, $rsscontent, $plastbuilddate;
   if ($name == "CHANNEL" || $name == "FEED") {
      $rsscontent['channel']['title'] = (isset($ptitle[1]) ? html_entity_decode(str_replace("&amp;","&",htmlspecialchars(trim($ptitle[1])))) : '');
      $rsscontent['channel']['link'] = (isset($plink[1]) ? htmlspecialchars(trim($plink[1])) : '');
      if ($ppubdate[1]) {
         $rsscontent['channel']['date'] = htmlspecialchars(trim($ppubdate[1]));
      } elseif($plastbuilddate) {
         $rsscontent['channel']['date'] = htmlspecialchars(trim($plastbuilddate));
      } else{
         $rsscontent['channel']['date'] = '';
      }
      $rsscontent['channel']['desc'] = html_entity_decode(str_replace("&amp;","&",htmlspecialchars($pdescription[1])));
      
      $ptitle[1] = $pdescription[1] =   $plink[1] = $ppubdate[1] = $plastbuilddate = "";
      $insidechannel = false;
   }
   if ($name == "IMAGE") {
      $rsscontent['image']['title'] = (isset($ptitle[2]) ? html_entity_decode(str_replace("&amp;","&",htmlspecialchars(trim($ptitle[2])))) : '');
      $rsscontent['image']['desc'] = (isset($pdescription[2]) ? $pdescription[2] : '');
      $rsscontent['image']['link'] = (isset($plink[2]) ? trim($plink[2]) : '');
      $rsscontent['image']['url'] = (isset($purl) ? trim($purl) : '');
      $rsscontent['image']['width'] = (isset($pwidth) ? $pwidth : '');
      $rsscontent['image']['height'] = (isset($pheight) ? $pheight : '');
      
      $plink[2] = $pimurl = $pwidth = $pheight = $ptitle[2] = $pdescription[2] = "";
      $insideimage = false;
   }
   if ($name == "ITEM") {
      
      $rsscontent['item'][$item_count]['link'] = (isset($plink[3]) ? trim($plink[3]) : '');
      $rsscontent['item'][$item_count]['title'] = (isset($ptitle[3]) ? html_entity_decode(str_replace("&amp;","&",htmlspecialchars(trim($ptitle[3])))) : '');
      $rsscontent['item'][$item_count]['date'] = (isset($ppubdate[3]) ? htmlspecialchars(trim($ppubdate[3])) : '');
      $rsscontent['item'][$item_count]['desc'] = (isset($pdescription[3]) ? html_entity_decode(str_replace("&amp;","&",htmlspecialchars($pdescription[3]))) : '');
      $item_count++;
      
      $ptitle[3] = $pdescription[3] = $plink[3] = $ppubdate[3] = "";
      $insideitem = false;
   }
  if ($name == "ENTRY") {
      $rsscontent['item'][$item_count]['link'] = (isset($eurl) ? $eurl : '');
      $rsscontent['item'][$item_count]['title'] = (isset($ptitle[4]) ? html_entity_decode(str_replace("&amp;","&",htmlspecialchars(trim($ptitle[4])))) : '');
      $rsscontent['item'][$item_count]['date'] = (isset($ppubdate[4]) ? htmlspecialchars(trim($ppubdate[4])) : '');
      $rsscontent['item'][$item_count]['desc'] = (isset($pdescription[4]) ? html_entity_decode(str_replace("&amp;","&",htmlspecialchars($pdescription[4]))) : '');
      $item_count++;
      
      $ptitle[4] = $pdescription[4] = $plink[4] = $ppubdate[4] = "";
      $insideitem = false;
   }
}

function characterData($parser, $data) {
   global $insideitem, $eurl, $tag, $ptitle, $item_count, $pdescription, $plink, $ppubdate, $insidechannel, $insidefeed, $itemdata, $insideentry, $insideimage, $purl, $pwidth, $pheight, $rsscontent, $plastbuilddate;
          
   if ($insideentry) {
   switch ($tag) {
      
      case "TITLE":
      $ptitle[4] .= $data;
      break;
      
      case "CONTENT":
      $pdescription[4] .= $data;
      break;
      
      case "SUMMARY":
      $pdescription[4] .= $data;
      break;
      
      case "DIV":
      $pdescription[4] .= $data;
      break;
      
      case "P":
      $pdescription[4] .= $data;
      break;
      
      case "BR":
      $pdescription[4] .= $data;
      break;
      
      case "LINK":
      $plink[4] .= $data;
      break;
      
      case "MODIFIED":
      $ppubdate[4] .= $data;
      break;
      
    }
   }elseif (($insidechannel || $insidefeed) && !$insideitem && !$insideimage) {
   switch ($tag) {
      
      case "TITLE":
      $ptitle[1] .= $data;
      break;
      
      case "DESCRIPTION":
      $pdescription[1] .= $data;
      break;
      
      case "TAGLINE":
      $pdescription[1] .= $data;
      break;
      
      case "LINK":
      $plink[1] .= $data;
      break;
      
      case "MODIFIED":
      $ppubdate[1] .= $data;
      break;
      
      case "PUBDATE":
      $ppubdate[1] .= $data;
      break;
      
      case "LASTBUILDDATE":
      $plastbuilddate .= $data;
      break;
      
    }
   } elseif ($insideitem) {
   switch ($tag) {
      
      case "TITLE":
      $ptitle[3] .= $data;
      break;
      
      case "DESCRIPTION":
      $pdescription[3] .= $data;
      break;
      
      case "UNENCODED":
      $pdescription[3] .= $data;
      break;
      
      case "LINK":
      $plink[3] .= $data;
      break;
      
      case "PUBDATE":
      $ppubdate[3] .= $data;
      break;
      
      case "DC:DATE":
      $ppubdate[3] .= $data;
      break;
      
    }
   } elseif ($insideimage && !$insideitem) {
   switch ($tag) {
      
      case "TITLE":
      $ptitle[2] .= $data;
      break;
      
      case "DESCRIPTION":
      $pdescription[2] .= $data;
      break;
      
      case "LINK":
      $plink[2] .= $data;
      break;
      
      case "PUBDATE":
      $ppubdate[2] .= $data;
      break;
      
      case "URL":
      $purl .= $data;
      break;
      
      case "WIDTH":
      $pwidth .= $data;
      break;
      
      case "HEIGHT":
      $pheight .= $data;
      break;
      
    }
   }
}

function parse_rss($url, $linkcheck = false, $xmlcheck = false) {
    global $rsscontent, $eurl, $ptitle, $pdescription, $plink, $ppubdate, $plastbuilddate, $purl, $item_count;
      $insideitem = false;
      $insidechannel = false;
      $insideimage = false;
      $tag = "";
      $eurl = $url;
      $item_count = '1';
      $ptitle[1] = $pdescription[1] = $plink[1] = $ppubdate[1] = $purl = "";
      $ptitle[2] = $pdescription[2] = $plink[2] = $ppubdate[2] = "";
      $ptitle[3] = $pdescription[3] = $plink[3] = $ppubdate[3] = "";
      $ptitle[4] = $pdescription[4] = $plink[4] = $ppubdate[4] = "";
      $rsscontent['channel'] = $rsscontent['image'] = $rsscontent['item'] = "";
      $pwidth = $purl = $pheight = $plastbuilddate = "";
      $convmap = array(0x0, 0x2FFFF, 0, 0xFFFF);
            
      $xml_parser = xml_parser_create();
      xml_set_element_handler($xml_parser, "startElement", "endElement");
      xml_set_character_data_handler($xml_parser, "characterData");

    if ($linkcheck) {
          $rssinfo = get_rssinfo($url, false);
            return $rssinfo;
      }
      $rssinfo = get_rssinfo($url, true);
      if (isset($rssinfo['urlerror'])) {
          return $rssinfo;
      }else{
           $data = $rssinfo['data'];
          if (!$rssinfo['utf8']) {
                preg_match("#.*?encoding=[\'\"](.*?)[\'\"].*#si", $data, $tag);
              $encoding = (isset($tag[1]) ? strtoupper($tag[1]) : 'ISO-8859-1');
              if (function_exists('mb_detect_encoding') && function_exists('mb_convert_encoding') && function_exists('mb_decode_numericentity')) {
                    $coding = mb_detect_encoding($data);
                    $data = mb_convert_encoding($data,"UTF-8","$coding,$encoding,ISO-8859-2,auto");
                     if ($coding != "ASCII") $data = mb_decode_numericentity($data, $convmap, 'UTF-8');
                }elseif(function_exists('iconv')) {
                    $data = iconv($encoding, 'UTF-8', $data);
                }else{
                    $data = utf8_decode($data);
                }
            }
            $data = str_replace ("&", "&amp;",$data);
        if (!xml_parse($xml_parser, $data)) {
                $rssinfo['xml'] = $rsscontent['error'] = "XML error:" . xml_error_string(xml_get_error_code($xml_parser)) . " at line " . xml_get_current_line_number($xml_parser);
                  if ($xmlcheck) {
                      return $rssinfo;
                  }else{
                      return $rsscontent;
                 }
            }
          xml_parser_free($xml_parser);
      }
      if ($xmlcheck) {
          $rssinfo['xml'] = _RSSVALID;
            return $rssinfo;
      }else{
        return $rsscontent;
      }
}

function get_rssinfo($url, $getdata=false, $del=false) {
   global $rssconfig;
   $rdf = parse_url($url);
   if (!isset($rdf['host'])) return false;
   if (!isset($rdf['path'])) $rdf['path'] = '/';
   if (!isset($rdf['port'])) $rdf['port'] = 80;
   if (!isset($rdf['query'])) $rdf['query'] = '';
   elseif ($rdf['query'] != '') $rdf['query'] = '?'.$rdf['query'];
   $cache = rss_cache($rdf, false, '', $del);
   if($del) return $cache;
   $file = array('size'=>0, 'type'=>'', 'date'=>0, 'animation'=>false);
   if ($fp = fsockopen($rdf['host'], $rdf['port'], $errno, $errstr, 15)) {
      fputs($fp, 'GET '.$rdf['path'].$rdf['query']." HTTP/1.0\r\n");
      fputs($fp, "User-Agent: CPG RSS Module File Reader\r\n");
      if ($cache) {
        fputs($fp, "If-Modified-Since: ".$cache['date']."\r\n");
         if(isset($cache['etag'])) fputs($fp, "If-None-Match: ".$cache['etag']."\r\n");
      }
      if (GZIPSUPPORT) fputs($fp, "Accept-Encoding: gzip;q=0.9\r\n");
      fputs($fp, "HOST: $rdf[host]\r\n\r\n");
      $data = rtrim(fgets($fp, 300));
      if (ereg(' 304 Not Modified', $data)) {
           if ((time()-(60 * $rssconfig['cache_time'])) <= $cache['cache']) {
                $file = $cache;
            }else{
                  $data = '';
                  fputs($fp,"Connection: close\r\n\r\n");
              fclose($fp);
                  $fp = fsockopen($rdf['host'], $rdf['port'], $errno, $errstr, 15);
              fputs($fp, 'GET '.$rdf['path'].$rdf['query']." HTTP/1.0\r\n");
                  fputs($fp, "User-Agent: CPG RSS Module File Reader\r\n");
                  if (GZIPSUPPORT) fputs($fp, "Accept-Encoding: gzip;q=0.9\r\n");
                  fputs($fp, "HOST: $rdf[host]\r\n\r\n");
                  $data = rtrim(fgets($fp, 300));
                  
        }
      }elseif (!ereg(' 200 OK', $data)) {
         if (ereg(' 301 Moved Permanently', $data)) {
           $file['301']='301 Moved Permanently';
         }elseif (ereg(' 301 Error', $data)) {
             $file['301']='301 Error';
         }elseif (ereg(' 307 Temporary Redirect', $data)) {
           trigger_error($rdf['path'].$rdf['query']."<br />$data", E_USER_WARNING);
           $file['urlwarning'] = $data;
         }elseif (ereg(' 302 Moved Temporarily', $data)) {
             $file['302']='302 Moved Temporarily';
         }elseif (ereg(' 302 Object moved', $data)) {
             $file['302']='302 Object moved';
         }elseif (ereg(' 302 Found', $data)) {
             $file['302']='302 Found';
         }else{
             trigger_error($rdf['path'].$rdf['query']."<br />$data", E_USER_WARNING);
             $file['urlerror'] = $data;
             return $file;
         }
      }
      if (!isset($file['cache'])) {
          $file['utf8'] = $GZIP = false;
            //$cache_data = '';
            // Read all headers
            while (!empty($data)) {
               $data = rtrim(fgets($fp, 300)); // read lines
               //$cache_data .= $data;
               if (ereg('Content-Length: ', $data)) {
                   $file['size'] = trim(eregi_replace('Content-Length: ', '', $data));
               }
               elseif (ereg('Content-Type: ', $data)) {
                  $file['type'] = trim(eregi_replace('Content-Type: ', '', $data));
             }
             elseif (ereg('Last-Modified: ', $data)) {
                  $file['date'] = trim(eregi_replace('Last-Modified: ', '', $data));
             }
             elseif (ereg('ETag: ', $data)) {
                  $file['etag'] = trim(eregi_replace('ETag: ', '', $data));
             }
             elseif (ereg('Location: ', $data)) {
                   $file['location'] = trim(eregi_replace('Locaton: ', '', $data));
                     if(isset($file['302'])){
                       trigger_error("<br />" . _302ERROR . $file['location']."<br />", E_USER_WARNING);
                  $file['urlerror'] =  "<br />" . $file['302']." - "._302ERROR . $file['location']."<br />";
                  return $file;
                     }elseif(isset($file['301'])) {
                       trigger_error("<br />" . _302ERROR . $file['location']."<br />", E_USER_WARNING);
                  $file['urlerror'] =  "<br />".$file['301']." - "._302ERROR . $file['location']."<br />";
                  return $file;
                     }
               }
               if (eregi('Content-Encoding: gzip', $data) || eregi('Content-Encoding: x-gzip', $data)) { $GZIP = true; }
             if (eregi('charset=utf-8', $data)) { $file['utf8'] = true; }
          }
        $data = '';
            if ($getdata) {
               while(!feof($fp)) {
                      $data .= fread($fp, 1024); // read binary
                }
                if ($GZIP) { $data = gzinflate(substr($data,10,-4)); }
                if ($getdata) $file['data'] = $data;
           }
      
          fputs($fp,"Connection: close\r\n\r\n");
          fclose($fp);
          $cache = rss_cache($rdf, true, $file);
      }   
   } else {
      trigger_error($errstr, E_USER_WARNING);
      $file['urlerror'] = $errstr;
      return $file;
   }
   return $file;
}

function rss_cache($rdf, $save, $data = '', $del=false, $delall=false) {
$cachedir = "cache/";
$filename = "rss_1119_".md5($rdf['host'].$rdf['path'].$rdf['query']).".inc";

if(!$save) {
    $data = '';
      if($del) {
          if(!file_exists($cachedir.$filename)) return "<p>Error, File was not Cached.</p>";
        if(unlink($cachedir.$filename)) {
                return "<p>Cache Deleted</p>";
            }else{
                return "<p>Error, could not delete cache file</p>";
            }
      }elseif($delall) {
          $count = '0';
            foreach (glob($cachedir."rss_1119_*.inc") as $delfilename) {
            echo "$delfilename cleared.\n<br />";
            unlink($delfilename);
                  $count++;
            }
            return $count;      
      }else{
          if(!file_exists($cachedir.$filename)) return false;
        $data = file($cachedir.$filename);
        $data = join($data, '');
          $data = unserialize($data);
          return $data;
     }
}else{
    $data['cache'] = time();
      $data = serialize($data);
      $fp = fopen($cachedir.$filename, 'wb');
      if(!$fp||(fwrite($fp, $data)==false)) echo '<p>Error, could not store cache file</p>';
    fclose($fp);
      chmod($cachedir.$filename, 0644);  //
}
}
 
Mustangv8 Visiter le site web du posteur
Dikkenek
WRInaute discret
WRInaute discret

Inscrit le: 22 Juin 2006
Messages: 94

URL permanente de ce messagePosté le : Mar Mai 27, 2008 17:12    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

bonjour,
<?php define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); ?> dans le header pour wordpress
 
Dikkenek Visiter le site web du posteur
jcaron
WRInaute passionné
WRInaute passionné

Inscrit le: 13 Fév 2004
Messages: 523
Localisation: Paris

URL permanente de ce messagePosté le : Mar Mai 27, 2008 17:19    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

Bon, en fait je pense que c'est tout con: ton code utilise xml_parser_create, dont le comportement au niveau gestion de l'encodage a changé suivant les versions de PHP (cf http://www.php.net/manual/en/function.xml-parser-create.php).

Je suppose que tu as un PHP >= 5.0.2, donc quoi qu'il arrive, le parser XML se débrouille tout seul pour détecter l'encodage source et convertir tout ça en UTF-8. Donc comme ton code fait déjà une première conversion en UTF-8 (mais laisse le "encoding=ISO-8859-1"), ça casse tout.

Remplace la ligne:
if (!$rssinfo['utf8']) {
par:
if (0 && !$rssinfo['utf8']) {

Et ça devrait marcher tout seul à mon avis.

Jacques.
 
jcaron Visiter le site web du posteur
Mustangv8
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 11 Avr 2005
Messages: 179
Localisation: Canada

URL permanente de ce messagePosté le : Mar Mai 27, 2008 17:57    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

Non ca ne fonctionne toujours pas mais je vais y arriver Very Happy
J'ai installé le module apache iconv sur le serveur de l'annuaire rss en anglais et les flux ISO s'affichent avec les accents et autres caracteres francais.
J'ai installé le meme module sur le serveur du site en francais et le probleme persiste mais au moins je sais ou chercher. C'est du coté du serveur. Merci beaucoup pour votre aide. J'aurai pas réussi sans vous Wink
 
Mustangv8 Visiter le site web du posteur
Mustangv8
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 11 Avr 2005
Messages: 179
Localisation: Canada

URL permanente de ce messagePosté le : Mar Mai 27, 2008 18:50    Sujet du message: [Reglé] Afficher flux RSS en UTF-8 et ISO-8859-1

Citation:
Remplace la ligne:
if (!$rssinfo['utf8']) {
par:
if (0 && !$rssinfo['utf8']) {


En fait je suis trop nul. Les modifications de fichier que je faisais, c'etait sur le site en anglais. Embarassed
Le serveur n'avait donc rien a voir le probleme et la modification de code ci-dessus fonctionne a la perfection sur le site francais. Very Happy
Merci beaucoup pour ton aide Jacques. Ca faisait 2 mois que je galerais avec ca et j'étais loin de penser trouver la solution sur un forum sur le référencement. Merci aussi a tous ceux qui m'ont répondus Wink
 
Mustangv8 Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort