Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fil RSS

12 réponses
Avatar
Pascale
Je suis en train de tenter de créer un fil RSS sur l'un de mes sites.
Les informations sont lues table MySQL.
Ce qui me pose problème, c'est le champ nommé « contenu » dans ma table.
Au moment de l'insertion dans la table (faite par un programme en PHP), je
mets :

$contenu = Ici mon texte '.$donnee1.' et là aussi '.$donnee2.' et là, la
fin du texte';

Le morceau de fonction qui ajoute ce champ contenu dans le fichier XML est
fait ainsi :

$desc = $parent->createElement("description");
$desc = $item->appendChild($desc);
$text_desc = $parent->createTextNode(utf8_encode($contenu));
$text_desc = $desc->appendChild($text_desc);

Mon problème est que j'aimerais mettre un chouïa de mise en forme (très peu
de chose, un bête balise <strong></strong> suffirait).

J'ai donc tenté de mettre par exemple :

$contenu = Ici mon texte <strong>'.$donnee1.'</strong> et là aussi
'.$donnee2.' et là, la fin du texte';

Mais si je mets des balises, elles ne sont pas interprétées, elles
ressortent telles quelles dans le fil RSS. Il est donc clair que je ne fais
pas du tout ce qu'il faut, mais j'aimerais savoir comment m'y prendre,
justement...

--
Pascale
http://www.la-grille-verte.net

10 réponses

1 2
Avatar
Mickaël Wolff
On 09/02/11 11:22, Pascale wrote:
Je suis en train de tenter de créer un fil RSS sur l'un de mes sites.


Quelle variante XML utilises-tu ?

Mais si je mets des balises, elles ne sont pas interprétées, elles
ressortent telles quelles dans le fil RSS.


Puisque tu utilises DOMDocument, je suppose que <strong> devient
&lt;strong&gt;

Il est donc clair que je ne fais
pas du tout ce qu'il faut, mais j'aimerais savoir comment m'y prendre,
justement...


Je n'ai jamais fait de flux RSS. Mais il m'est avis que si tu veux
utiliser du HTML, du dois déclarer un namespace XHTML et gérer les
namespace (RDF et XHTML). Mais peut-être qu'on peut utiliser les styles
en RDF ou Atom ?
Avatar
Pascale
Mickaël Wolff écrivait
news:4d52882e$0$18785$:

Puisque tu utilises DOMDocument, je suppose que <strong> devient
&lt;strong&gt;



Oui, si j'utilise la fonction htmlentities, c'est ce qui arrive... mais à
la sortie, le résultat est le même.

Je n'ai jamais fait de flux RSS. Mais il m'est avis que si tu veux
utiliser du HTML, du dois déclarer un namespace XHTML et gérer les
namespace (RDF et XHTML). Mais peut-être qu'on peut utiliser les styles
en RDF ou Atom ?



Pour l'instant, je m'en tiens au RSS, c'est bien assez compliqué pour moi
(Atom a l'air pire).
Dans le head de mon programme (celui qui génère le flux RSS), j'ai mis :
<link rel="alternate" type="application/rss+xml" title="emplacement du
titre" href="news_FR_flux.xml" />
et il se peut bien, en effet, que le type ne convienne pas.

--
Pascale
http://www.la-grille-verte.net
Avatar
Mickaël Wolff
On 09/02/11 12:43, Pascale wrote:
Puisque tu utilises DOMDocument, je suppose que<strong> devient
&lt;strong&gt;



Oui, si j'utilise la fonction htmlentities, c'est ce qui arrive... mais à
la sortie, le résultat est le même.



C'est vrai que l'implémentation du DOM dans PHP es tun peu bancale à
ce niveau là.

$doc->createTextElement('<strong>') ; // les chevrons sont échapés
$doc->createElement('p', '<script>alert("haha")</script>'); // Misère!

Pour l'instant, je m'en tiens au RSS, c'est bien assez compliqué pour moi
(Atom a l'air pire).


Mais non :o)

Dans le head de mon programme (celui qui génère le flux RSS), j'ai mis :
<link rel="alternate" type="application/rss+xml" title="emplacement du
titre" href="news_FR_flux.xml" />
et il se peut bien, en effet, que le type ne convienne pas.



Déjà il y a deux version de RSS. En fait, je confonds pas mal tout
ça. Je pensais que RSS était le format général, mais en fait c'est une
application de RDF. C'est pour ça que je te demandais si tu voulais
faire du RDF ou de l'Atom.

Bon, en fait il semblerait que les lecteurs de flux RSS interprète
les sections CDATA incluent dans les éléments description comme étant du
HTML. Je n'ai pas cherché plus avant si c'est un comportement défini par
la norme.

Un petit exemple que je me suis fait :

=== 8< == <?php

$doc = new domdocument('1.0', 'UTF-8') ;
$doc->formatOutput = true ; // J'aime l'indentation
// Création du nœud racine du document RDF dans le namespace rdf
$root =
$doc->createElementNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#',
'rdf:RDF') ;
// On définit le namespace anonyme comme correspondant à RSS
$root->setAttribute('xmlns', 'http://purl.org/rss/1.0/') ;

$channel = $doc->createElement('channel') ;
$channel->setAttribute('rdf:about', 'http://www.xml.com/xml/news.rss') ;
$es = array
( 'title' => 'Grand news'
, 'link' => 'http://example.com/mega-news'
) ;
foreach($es as $n => $c)
{
$e = $doc->createElement($n, $c) ;
$channel->appendChild($e) ;
}

// On insère le HTML via une section CDATA
$content = $doc->createCDataSection('Some <strong>incredible</strong>
stuff!') ;
$desc = $doc->createElement('description') ;
$desc->appendChild($content) ;
$channel->appendChild($desc) ;

$root->appendChild($channel) ;
$doc->appendChild($root) ;

header('Content-type: application/rss+xml; charset=utf-8') ;
echo $doc->saveXML() ;
=== >8 ===
Avatar
Mickaël Wolff
On 09/02/11 14:06, Mickaël Wolff wrote:

D'ailleurs, quelques liens :
http://web.resource.org/rss/1.0/spec#s7
http://www.altova.com/technote16.html
Avatar
Pascale
Mickaël Wolff écrivait
news:4d529f7a$0$10734$:

Déjà il y a deux version de RSS. En fait, je confonds pas mal tout
ça. Je pensais que RSS était le format général, mais en fait c'est une
application de RDF. C'est pour ça que je te demandais si tu voulais
faire du RDF ou de l'Atom.



D'accord, je comprends !

Bon, en fait il semblerait que les lecteurs de flux RSS interprète
les sections CDATA incluent dans les éléments description comme étant
du HTML. Je n'ai pas cherché plus avant si c'est un comportement
défini par la norme.



Rhâââ, oui, que chuis bête, j'ai vu ça quelque part, qu'il fallait utiliser
CDATA, il faut que je fasse quelques recherches.

Un petit exemple que je me suis fait :[...]



Et bien dis donc, pour quelqu'un qui n'a jamais fait de fil RSS, tu sais
faire (-:
Je pense que je vais trouver mon bonheur là dedans, je donnerai des
nouvelles selon mon degré de réussite... ou de non réussite ! (:

--
Pascale
http://www.la-grille-verte.net
Avatar
Mickaël Wolff
On 09/02/11 15:23, Pascale wrote:

Rhâââ, oui, que chuis bête, j'ai vu ça quelque part, qu'il fallait utiliser
CDATA, il faut que je fasse quelques recherches.


Il faut dire qu'on peut considérer ça comme un bricolage, ce n'est
donc pas évident. J'aurais préféré avoir la nécessité d'utiliser un
namespace. Au moins, on serait certain que le contenu est bien
interprété comme de l'HTML. Surtout qu'à la base, une section CDATA
n'est pas censée être intérprétée comme ça.

Et bien dis donc, pour quelqu'un qui n'a jamais fait de fil RSS, tu sais
faire (-:


Oui, finalement c'était pas si compliqué (je reculais pensant que ce
serait la misère). Merci ;)
Avatar
Pascale
Mickaël Wolff écrivait
news:4d52c0fa$0$7829$:

Oui, finalement c'était pas si compliqué (je reculais pensant que ce
serait la misère). Merci ;)



Moi, par contre, je rame (comme d'habitude, oui, je sais...)... J'ai essayé
d'intégrer tes suggestions dans mon code. Ça donne :

$desc = $parent->createElement("description");
$desc = $item->appendChild($desc);
$text_desc = $parent->createCDataSection(utf8_encode($contenu));
$text_desc = $desc->appendChild($text_desc);

Si je regarde mon fichier XML, j'ai :

<description><![CDATA[début du texte <b>texte qui devrait être en gras</b>
la fin du texte]]></description>

Je n'ai pas de balises qui traînent mais... celles-ci sont purement et
simplement ignorées.

Grmbl. Et dire qu'Atom est réputé encore plus compliqué...

--
Pascale
http://www.la-grille-verte.net
Avatar
Pascal Poncet
Le 09/02/2011 12:22, Pascale a écrit :
Mais si je mets des balises, elles ne sont pas interprétées, elles
ressortent telles quelles dans le fil RSS. Il est donc clair que je ne fais
pas du tout ce qu'il faut, mais j'aimerais savoir comment m'y prendre,
justement...



Bonsoir PascalE,

Je ne suis pas plus spécialiste de la chose que l'ami Mickaël mais :

1. Si tu génère un fichier XML statique correspondant aux news, quelle
tête a-t-il ?

2. Tu peux déjà le valider dans un truc comme [http://feedvalidator.org/]


--
Cordialement,
Pascal
Avatar
Pascale
Pascal Poncet écrivait
news:iiujdg$en$:

Je ne suis pas plus spécialiste de la chose que l'ami Mickaël mais :

1. Si tu génère un fichier XML statique correspondant aux news, quelle
tête a-t-il ?



Et bien par exemple :

<?xml version="1.0" encoding="iso-8859-15"?>
<rss version="2.0">
<channel>
<description>Ici la description du
site</description><link>http://www........</link><title>Titre du
site</title>
<item>
<title>Titre de la niouze</title>
<description><![CDATA[Texte de la niouze <b>texte qui devrait être en
gras</b> fin du texte de la niouzes]]></description>
<link>http://www.....</link>
<author>...</author>
<source>.....</source>
</item>
</channel>
</rss>

2. Tu peux déjà le valider dans un truc comme [http://feedvalidator.org/]



Merci, je ne savais pas que ça existait !

--
Pascale
http://www.la-grille-verte.net
Avatar
Pascal Poncet
Le 09/02/2011 18:50, Pascale a écrit :
Et bien par exemple :

<?xml version="1.0" encoding="iso-8859-15"?>
<rss version="2.0">
<channel>
<description>Ici la description du
site</description><link>http://www........</link><title>Titre du
site</title>
<item>
<title>Titre de la niouze</title>
<description><![CDATA[Texte de la niouze<b>texte qui devrait être en
gras</b> fin du texte de la niouzes]]></description>
<link>http://www.....</link>
<author>...</author>
<source>.....</source>
</item>
</channel>
</rss>



Heu... je n'ai pas de problème avec cet exemple, le gras est bien
affiché dans FF3 !?

Je l'ai enregistré sous le nom "rss.xml" et ouvert tel quel.
Ton fichier généré est statique ou dynamique ?
Je veux dire par là : tu enregistres physiquement un fichier xml sur ton
serveur, ou tu fournis un lien vers une ressource construite en temps
réel par un script php ?
Dans le deuxième cas, tu as peut-être un problème de 'Content-Type'.


--
Cordialement,
Pascal
1 2