Pb flux RSS et encodage


SWCF
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 343
Inscription: 28 Jan 2010

Pb flux RSS et encodage

Message le Jeu Avr 15, 2010 21:18

Bonsoir,

j'ai un problème avec l'encodage de mon flux Rss
http://www.good-luck-ecommerce.fr/flux.xml

Les tables de ma bdd est en utf general ci. Et le site n'a pas de problème que le flux. Si vous avez des idées.


ps : est-il possible de mettre sur un même flux des infos de différentes tables.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Pb flux RSS et encodage

Message le Jeu Avr 15, 2010 22:45

Sans savoir ce que tu utilises pour générer le flux, difficile de te dire où est le problème, mais ça a l'air assez sauvage. Je dirais que tu fais une conversion en ISO à un moment donné, et qu'ensuite tu le donnes à un bout de code (qui contient un htmlentities ou équivalent) qui veut de l'UTF-8 (et qui ne vérifie que dalle).

Jacques.


webinyou
WRInaute discret
WRInaute discret
 
Messages: 143
Inscription: 10 Avr 2010

Re: Pb flux RSS et encodage

Message le Ven Avr 16, 2010 9:44

Ouvre ton fichier "flux.xml" avec un éditeur de code, puis vérifie :
- si le fichier est encodé en UTF-8
- si dans la source, il y a bien encoding="UTF-8" dans la balise "xml"


SWCF
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 343
Inscription: 28 Jan 2010

Re: Pb flux RSS et encodage

Message le Ven Avr 16, 2010 18:20

webinyou a écrit:Ouvre ton fichier "flux.xml" avec un éditeur de code, puis vérifie :
- si le fichier est encodé en UTF-8
- si dans la source, il y a bien encoding="UTF-8" dans la balise "xml"


il y a rien :
Code: Tout sélectionner
<?xml version="1.0"?>
<rss version="2.0"><channel>


Mon fichier php qui génère le flux :
Code: Tout sélectionner
<?php

function &init_interview_rss(&$xml_file)
{
        $root = $xml_file->create_element("rss"); //création de l'element
        $root->set_attribute("version", "2.0"); //on lui ajoute un attribut
        $root = $xml_file->append_child($root); //on l'insère dans le noeud parent (ici root qui est "rss")
       
        $channel = $xml_file->create_element("channel");
        $channel = $root->append_child($channel);
               
        $desc = $xml_file->create_element("description");
        $desc = $channel->append_child($desc);
        $text_desc = $xml_file->create_text_node("Good Luck Ecommerce. Conseils pour e-commercant. Astuce e-commerce"); //on insère du texte entre les balies <description></description>
        $text_desc = $desc->append_child($text_desc);
       
        $link = $xml_file->create_element("link");
        $link = $channel->append_child($link);
        $text_link = $xml_file->create_text_node("http://www.good-luck-ecommerce.fr");
        $text_link = $link->append_child($text_link);
       
        $title = $xml_file->create_element("title");
        $title = $channel->append_child($title);
        $text_title = $xml_file->create_text_node("Good Luck Ecommerce. Conseils e-commerce");
        $text_title = $title->append_child($text_title);
       
        return $channel;
}

function add_interview_node(&$parent, $root, $id, $titre, $titreweb, $descriptif)
{
        $item = $parent->create_element("item");
        $item = $root->append_child($item);
       
        $title = $parent->create_element("title");
        $title = $item->append_child($title);
        $text_title = $parent->create_text_node($titre);
        $text_title = $title->append_child($text_title);
       
        $link = $parent->create_element("link");
        $link = $item->append_child($link);
        $text_link = $parent->create_text_node("http://www.good-luck-ecommerce.fr/interviews/interview-".$titreweb.".php");
        $text_link = $link->append_child($text_link);
       
        $desc = $parent->create_element("description");
        $desc = $item->append_child($desc);
        $text_desc = $parent->create_text_node($descriptif);
        $text_desc = $desc->append_child($text_desc);
             
        $author = $parent->create_element("author");
        $author = $item->append_child($author);
        $text_author = $parent->create_text_node("Good Luck Ecommerce");
        $text_author = $author->append_child($text_author);
       
        $pubdate = $parent->create_element("pubDate");
        $pubdate = $item->append_child($pubdate);
        $text_date = $parent->create_text_node($dateinterview);
        $text_date = $pubdate->append_child($text_date);
       
        $guid = $parent->create_element("guid");
        $guid = $item->append_child($guid);
        $text_guid = $parent->create_text_node("http://www.good-luck-ecommerce.fr/interviews/interview.php?page=".$titreweb."");
        $text_guid = $guid->append_child($text_guid);
       
        $src = $parent->create_element("source");
        $src = $item->append_child($src);
        $text_src = $parent->create_text_node("http://www.good-luck-ecommerce.fr");
        $text_src = $src->append_child($text_src);
}


function rebuild_rss()
{
        //On se connecte à la BDD
mysql_connect(XXXXXXXXXXXXXXXXXXX);
mysql_select_db("FFFFFFFFFFFFFFFFFFFFFF");

        //On récupère les interview
        $nws = mysql_query("SELECT id, titre, titreweb, descriptif FROM interview ORDER BY id DESC")  or die(mysql_error());


        //On crée le fichier XML
$xml_file = domxml_new_doc("1.0");

        //On initialise le fichier XML pour le flux RSS
        $channel = init_interview_rss($xml_file);

        //On ajoute chaque interview au fichier RSS
        while($interview = mysql_fetch_assoc($nws))
        {
                add_interview_node($xml_file, $channel, $interview["id"], $interview["titre"], $interview["titreweb"], $interview["descriptif"], $interview["dateinterview"]);
        }
       
        //On écrit le fichier
$xml_file->dump_file("flux.xml");
}
?>

<?php
rebuild_rss();
?>

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Pb flux RSS et encodage

Message le Ven Avr 16, 2010 18:53

Tu es sûr que ta base est bien en UTF-8 et la connexion à ta base aussi? Mon petit doigt me dit que ce n'est pas le cas, et que ta base est en ISO-8859-1, et c'est donc normal que ça déconne, les fonction domxml veulent de l'UTF-8.

Ajoute un utf8_encode() autour des champs que tu récupères de ta BDD avant de les passer à add_inverview_node, ça devrait beaucoup mieux fonctionner.

Jacques.


SWCF
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 343
Inscription: 28 Jan 2010

Re: Pb flux RSS et encodage

Message le Ven Avr 16, 2010 20:35

Je ne suis sûr de rien.

Phpmyadmin me dit : interclassement connexion mysql utf8 general ci.
Les tables utf8
Les pages de mon site sont en iso (ça marche bien)


D'après ce que j'ai compris de ce que tu me dis, j'ai fais ça :
utf8_encode($nws = mysql_query("SELECT id, titre, titreweb, descriptif FROM interview ORDER BY id DESC")) or die(mysql_error());


Ca change pas. :?
C'était ce que tu me disais où j'ai mal compris ?

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Pb flux RSS et encodage

Message le Ven Avr 16, 2010 23:07

Euh non, tu modifies:
add_interview_node($xml_file, $channel, $interview["id"], $interview["titre"], $interview["titreweb"], $interview["descriptif"], $interview["dateinterview"]);

et tu le remplaces par:
add_interview_node($xml_file, $channel, $interview["id"], utf8_encode($interview["titre"]), $interview["titreweb"], utf8_encode($interview["descriptif"]), $interview["dateinterview"]);

Jacques.


webinyou
WRInaute discret
WRInaute discret
 
Messages: 143
Inscription: 10 Avr 2010

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 7:01

1. Renomme
Code: Tout sélectionner
<?xml version="1.0"?>
en
Code: Tout sélectionner
<?xml version="1.0" encoding="UTF-8"?>
.

2. Le fichier "flux.xml" doit être encodé en UTF-8, c'est au niveau de la structure du fichier. Pour cela assure-toi bien qu'avec ton éditeur, tu es bien sur un format UTF-8.
Par exemple, avec notepad++, va sur le menu "Format/Encoder en UTF-8 (sans BOM)".

3. La même chose pour le fichier source PHP qui génère le fichier "flux.xml"


SWCF
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 343
Inscription: 28 Jan 2010

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 9:29

jcaron a écrit:Euh non, tu modifies:
add_interview_node($xml_file, $channel, $interview["id"], $interview["titre"], $interview["titreweb"], $interview["descriptif"], $interview["dateinterview"]);

et tu le remplaces par:
add_interview_node($xml_file, $channel, $interview["id"], utf8_encode($interview["titre"]), $interview["titreweb"], utf8_encode($interview["descriptif"]), $interview["dateinterview"]);

Jacques.


merci ça fonctionne !

merci à vous deux.
Si vous avez une idée pour mettre les flux rss des autres tables (articles et blog) ?

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 10:40

Ben c'est pareil, tu ajoutes des utf8_encode autour des champs qui contiennent du texte avec éventuellement des accents.

Jacques.


SWCF
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 343
Inscription: 28 Jan 2010

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 11:13

euh non

comment mettre sur 1 même flux 2 tables différentes.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 12:02

Ce serait probablement plus intelligent de faire des flux RSS séparés, non?

Sinon tu peux remplacer ton SELECT par un SELECT id,titre,titreweb,descriptif FROM interview UNION SELECT id,titre,titreweb,descriptif FROM articles UNION SELECT id,titre,titreweb,descriptif FROM blog par exemple. Il faut évidemment adapter les noms des champs, et il va falloir:
- passer des informations différentes pour construire les URLs qui vont bien en conséquence
- faire un tri global suivant un ordre à déterminer

Autre possibilité, tu fais le premier select avec la boucle qui fait des add_interview_node, puis un deuxième select avec une boucle qui fait des add_article_node (il faut créer cette fonction qui est comme l'autre à quelques détails près, en particulier l'URL), etc.

Jacques.


SWCF
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 343
Inscription: 28 Jan 2010

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 15:14

Merci JC, tu es un dieu !

J'ai opté pour ta deuxième solution.
Pour ceux qui auront le même soucis que moi, voici mon bazar :

//On récupère les interview
utf8_encode($nws = mysql_query("SELECT id, titre, titreweb, descriptif, timestamp FROM interview ORDER BY timestamp DESC")) or die(mysql_error());

//On récupère les articles
utf8_encode($nws2 = mysql_query("SELECT id, titre, titreweb, descriptif, timestamp FROM article ORDER BY timestamp DESC")) or die(mysql_error());

//On récupère les portraits
utf8_encode($nws3 = mysql_query("SELECT id, interviewe, intervieweweb, descriptif, timestamp FROM portrait ORDER BY timestamp DESC")) or die(mysql_error());

//On récupère le blog
utf8_encode($nws4 = mysql_query("SELECT id, titre, titreweb, timestamp FROM blog ORDER BY timestamp DESC")) or die(mysql_error());


//On crée le fichier XML
$xml_file = domxml_new_doc("1.0");

//On initialise le fichier XML pour le flux RSS
$channel = init_interview_rss($xml_file);

//On ajoute chaque interview au fichier RSS
while($interview = mysql_fetch_assoc($nws))
{
add_interview_node($xml_file, $channel, $interview["id"], utf8_encode($interview["titre"]), $interview["titreweb"], utf8_encode($interview["descriptif"]), $interview["timestamp"]);
}

//On ajoute chaque article au fichier RSS
while($article = mysql_fetch_assoc($nws2))
{
add_article_node($xml_file, $channel, $article["id"], utf8_encode($article["titre"]), $article["titreweb"], utf8_encode($article["descriptif"]), $article["timestamp"]);
}

//On ajoute chaque article au fichier RSS
while($portrait = mysql_fetch_assoc($nws3))
{
add_portrait_node($xml_file, $channel, $portrait["id"], utf8_encode($portrait["interviewe"]), $portrait["intervieweweb"], utf8_encode($portrait["descriptif"]), $portrait["timestamp"]);
}

//On ajoute chaque article du blog au fichier RSS
while($blog = mysql_fetch_assoc($nws4))
{
add_blog_node($xml_file, $channel, $blog["id"], utf8_encode($blog["titre"]), $blog["titreweb"], utf8_encode($blog["descriptif"]), $blog["timestamp"]);
}

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 16:35

Le ut8_encode() autour de chaque mysql_query ça ne sert à rien, et en plus ça doit fausser la détection d'erreur.

Jacques.


SWCF
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 343
Inscription: 28 Jan 2010

Re: Pb flux RSS et encodage

Message le Sam Avr 17, 2010 19:19

jcaron a écrit:Le ut8_encode() autour de chaque mysql_query ça ne sert à rien, et en plus ça doit fausser la détection d'erreur.

Jacques.


ok j'ai viré. Merci.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités