Page 1 sur 1

Flux rss via php n'affiche pas les apostrophes

Posté : 27 mars 2012, 10:19
par liliade
Bonjour,

J'ai mis un flux rss généré par php sur un site. Quand je vérifie via ma barre d'adresse je constate que :

- avec FF les apostrophes sont transformés tant dans les titres que dans le résumé en signe chinois

- avec IE les apostrophes sont éludés dans le titre uniquement.

Pourtant j'ai encodé en UTF8 avec notepad. Ma bdd, ma table, mes champs sont en utf8

Quelqu'un s'y connaissant pourrait-il m'aider s'il vous plaît. Merci par avance.

Je mets ci-dessous le script php générant le fichier xml
<?php

function &init_news_rss(&$xml_file)
{
        $root = $xml_file->createElement("rss"); // création de l'élément
        $root->setAttribute("version", "2.0"); // on lui ajoute un attribut
        $root = $xml_file->appendChild($root); // on l'insère dans le noeud parent (ici root, qui est "rss")
        
        $channel = $xml_file->createElement("channel");
        $channel = $root->appendChild($channel);
                
        $desc = $xml_file->createElement("description");
        $desc = $channel->appendChild($desc);
        $text_desc = $xml_file->createTextNode("madescription"); // on insère du texte entre les balises <description></description>
        $text_desc = $desc->appendChild($text_desc);
        
        $link = $xml_file->createElement("link");
        $link = $channel->appendChild($link);
        $text_link = $xml_file->createTextNode("http://www.site.com");
        $text_link = $link->appendChild($text_link);
        
        $title = $xml_file->createElement("title");
        $title = $channel->appendChild($title);
        $text_title = $xml_file->createTextNode("site.com");
        $text_title = $title->appendChild($text_title);
        
        return $channel;
}

function add_news_node(&$parent, $root, $id_billet, $auteur, $titre, $resume, $date)
{
        $item = $parent->createElement("item");
        $item = $root->appendChild($item);
        
        $title = $parent->createElement("title");
        $title = $item->appendChild($title);
        $text_title = $parent->createTextNode($titre);
        $text_title = $title->appendChild($text_title);
        
        $link = $parent->createElement("link");
        $link = $item->appendChild($link);
        $text_link = $parent->createTextNode("http://www.site.com/controleur/commentaire/index.php?billets=$id_billet");
        $text_link = $link->appendChild($text_link);
        
        $desc = $parent->createElement("description");
        $desc = $item->appendChild($desc);
        $text_desc = $parent->createTextNode($resume);
        $text_desc = $desc->appendChild($text_desc);
        
        $com = $parent->createElement("comments");
        $com = $item->appendChild($com);
        $text_com = $parent->createTextNode("http://www.site.com/controleur/commentaire/index.php?billets=$id_billet");
        $text_com = $com->appendChild($text_com);
        
        $author = $parent->createElement("author");
        $author = $item->appendChild($author);
        $text_author = $parent->createTextNode($auteur);
        $text_author = $author->appendChild($text_author);
        
        $pubdate = $parent->createElement("pubDate");
        $pubdate = $item->appendChild($pubdate);
        $text_date = $parent->createTextNode($date);
        $text_date = $pubdate->appendChild($text_date);
        
        $guid = $parent->createElement("guid");
        $guid = $item->appendChild($guid);
        $text_guid = $parent->createTextNode("http://www.site.com/controleur/commentaire/index.php?billets=$id_billet");
        $text_guid = $guid->appendChild($text_guid);
        
        $src = $parent->createElement("source");
        $src = $item->appendChild($src);
        $text_src = $parent->createTextNode("http://www.site.com");
        $text_src = $src->appendChild($text_src);
}


function rebuild_rss()
{
        // on se connecte à la BDD
       try 
		{
			$bdd = new PDO('mysql:host=localhost;dbname=mabdd','monidentifiant','mommotdepasse' );
		}
		catch(Exception $e)
		{
			die ('Erreur:'.$e->getMessage());
		}
		$req = $bdd->query('SELECT id_billet, titre, resume,auteur,DATE_FORMAT(date_de_creation,\'%d/%m/%Y à %Hh%imin%ss\') AS date_de_creation_fr FROM tableau ORDER BY date_de_creation DESC LIMIT 0,5');
		
 
        // on crée le fichier XML
        $xml_file = new DOMDocument("1.0");
		
		$channel = init_news_rss($xml_file);

 
        // on ajoute chaque news au fichier RSS
       while( $donnees = $req->fetch() )
        {
                add_news_node($xml_file, $channel, utf8__encode($donnees["id_billet"]), utf8__encode($donnees["auteur"]), utf8__encode($donnees["titre"]), 
utf8__encode($donnees["resume"]), utf8__encode($donnees["date_de_creation"]));
        }
        
        // on écrit le fichier
        $xml_file->save("rss.xml");
}



rebuild_rss();



?>
 

Re: Flux rss via php n'affiche pas les apostrophes

Posté : 27 mars 2012, 10:44
par xTG
Si tes données sont en utf8 dans ta table tu n'as donc pas besoin de les passer dans ta fonction utf8__decode() (fonction perso ?) car justement cela va mettre le tintouin dedans.

Re: Flux rss via php n'affiche pas les apostrophes

Posté : 27 mars 2012, 11:15
par liliade
Bonjour xTG

En ne mettant pas utf8_encode j'ai le message suivant qui s'affiche quand je vérifie mon script :

Warning: DOMDocument::save() [domdocument.save]: string is not in UTF-8 in /home/clients/site.com/http/fichier.php on line 162

et bien entendu ceci se répète pour tous ce qui a trait aux articles.

Merci de chercher à m'aider.

Re: Flux rss via php n'affiche pas les apostrophes

Posté : 27 mars 2012, 11:26
par xTG
Ta table n'est donc pas en utf8 (ou bien les informations qui y sont enregistrées) ou bien la connexion au sgbd n'est pas en utf8.
faq-tutoriels/encodage-utf-t245062.html