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

WRInaute discret
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?
 
WRInaute accro
Re: Afficher flux RSS en UTF-8 et ISO-8859-1

Mustangv8 a dit:
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.
 
WRInaute accro
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.
@+
 
WRInaute accro
serval2a a dit:
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 :-(

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 :)

serval2a a dit:
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.
 
WRInaute discret
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);  // 
}
}
 
WRInaute accro
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.x ... 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.
 
WRInaute discret
Non ca ne fonctionne toujours pas mais je vais y arriver :D
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:
 
WRInaute discret
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. :oops:
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. :D
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:
 
Discussions similaires
Haut