Problème avec le caractére &

Mammouth du PHP | 1511 Messages

15 janv. 2007, 20:21

Bonjour,
il semblerait que le caractére & cause quelques problèmes...
Connaitriez-vous des remedes pour parer a ce petit problème ?
@+ et merci d'avance ;)

Mammouth du PHP | 19672 Messages

15 janv. 2007, 20:51

Oui, tu dois utiliser les entités HTML : "&" => "&" par exemple.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1511 Messages

15 janv. 2007, 21:46

Ok je vais essayer ;)
@+

Mammouth du PHP | 1511 Messages

15 janv. 2007, 22:13

Bon nickel, ca marche, merci maitre cyrano ;)
Par contre, j'ai deux trois petits problèmes avec simplexml...
Voici mon flux RSS :
http://dev.alexgoss.info/index.php?modu ... action=rss
Malheureusement, voila a quoi j'ai droit en regardant la source...:

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1"?> <rss version="2.0"> <channel> <title/> <link>http://www.radioabf.net</link> <description>RSS feed of radioABF's news</description> <language>fr, en</language> <copyright>(c) 2006 RadioABF Team</copyright> <pubdate/> <item><title>test [2]</title><link>http://dev.alexgoss.info/index.php?module=news&action=view&id=37</link><pubDate>Mon, 15 Jan 2007 19:22:07 +0100</pubDate><description>Ceci aussi doit apparaitre dans le flux rss, en t&ecirc;te de page, si je n&#39;ai pas rajout&eacute; d&#39;autre news apr&egrave;s !...</description></item><item><title>Test</title><link>http://dev.alexgoss.info/index.php?module=news&action=view&id=36</link><pubDate>Mon, 15 Jan 2007 19:21:08 +0100</pubDate><description>Normalement, ceci doit apparaitre dans le flux rss.<img src=\"includes/tiny_mce/plugins/emotions/images/icon_blase.gif\" />...</description></item></channel> <pubdate>Mon, 15 Jan 2007 21:34:18 +0100</pubdate><title>RadioABF :: Flux RSS des news</title></rss>
On remarquera la position plus que bizarre du pubdate et du title du flux...
Pourtant, mon flux est generé de la facon suivante :
<?php
	private function make_rss($cid='') {
		global $db;
		$rss_base = <<<XML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel>
  <title></title> 
  <link>http://www.radioabf.net</link> 
  <description>RSS feed of radioABF's news</description> 
  <language>fr, en</language> 
  <copyright>(c) 2006 RadioABF Team</copyright>
  <pubdate></pubdate>
</channel>
</rss>
XML;
$rss_item = <<<XML
  <item>
	  <title></title>
	  <link></link>
	  <pubDate></pubDate>
	  <description></description>
  </item>
XML;
		header('Content-type: text/xml');
		$simplexml = new SimpleXMLElement($rss_base);
		$simplexml->pubdate = date("D, d M Y H:i:s +0100");
		$simplexml->title = $_SESSION['config']['sitename'].' :: Flux RSS des news';
		$q_nrss = $db->load_query('news_select_rss', array('news.start' => '0', 'news.limit' => '20', 'site.id' => $_SESSION['s_data']['site_id']));
		if($db->count_rows($q_nrss) > 0) {
			while($data = $db->fetch($q_nrss)) {
				extract($data);
				$node = $simplexml->channel;
				$news_item = $node->addChild('item');
				$news_item->addChild('title');
				$news_item->addChild('link');
				$news_item->addChild('pubDate');
				$news_item->addChild('description');
				$news_item->title = stripslashes($news_title);
				$news_item->link = 'http://'.$_SERVER['HTTP_HOST'].'/'.rewrite_link('news', array('action' => 'view', 'id' => $news_id));
				$news_item->pubDate = date("D, d M Y H:i:s +0100", $news_date);
				$news_item->description = htmlentities(substr($news_content, 0, 300)).'...';
				unset($news_item, $node, $data);
			}
		}
		else {
				$node = $simplexml->channel;
				$news_item = $node->addChild('item');
				$news_item->addChild('title');
				$news_item->addChild('pubDate');
				$news_item->addChild('description');
				$news_item->title = 'Sorry...';
				$news_item->pubDate = date("D, d M Y H:i:s +0100");
				$news_item->description = 'There is no news on RadioABF for the moment, please retry later';
		}
	echo $simplexml->asXML();
	}
?>
Donc je ne saisis pas du tout la position de mes balises pubdate et title...
Si quelqu'un pouvait allumer ses lumières afin de m'éclairer ca me serait d'une grande aide ;)
@+

Mammouth du PHP | 2937 Messages

16 janv. 2007, 11:50

Dans l'élément description, tu dois sans doute générer des entités HTML pour coder les caractères spéciaux (&ecirc; pour ê). Or, le & est lui-même codé.

Essaie d'utiliser la balise <![CDATA[ ]]>.

Mammouth du PHP | 1511 Messages

16 janv. 2007, 13:45

Pas bête ^^
Pourtant je l'ai utilisé pas plus tard qu'hier :lol: le <![cdata[
@+

Mammouth du PHP | 1511 Messages

16 janv. 2007, 14:26

Bon, ca devient de plus en plus bizarre...
J'ai fait:
<?php
$news_item->description = '<![CDATA['.substr($news_content, 0, 300).'...]]>';
?>
Et il m'enregistre la chaine comme si j'avais fait un htmlentities sur le contenu de la variable, donc le <![CDATA[ est remplacé par <![CDATA[
@+

Mammouth du PHP | 2937 Messages

16 janv. 2007, 14:37

Le problème doit venir du fichier générant le fil RSS, mais je n'en vois pas la source exacte.

Soit dit en passant, il me semble que c'est application/xml plutôt que text/xml pour le header("Content-type:").

Mammouth du PHP | 1511 Messages

16 janv. 2007, 14:49

Ca ne marche pas non plus.
Enfin bon, je me suis résigné a utiliser d'autres méthodes pour composer mon flux rss...
<?php
	private function make_rss($cid='') {
		global $db;
		$rss = '<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel>
  <title>'.$_SESSION['config']['sitename'].' :: Flux RSS des news</title> 
  <link>http://www.radioabf.net</link> 
  <description>RSS feed of radioABF\'s news</description> 
  <language>fr, en</language> 
  <copyright>(c) 2006 RadioABF Team</copyright>
  <pubdate>'.date("D, d M Y H:i:s +0100").'</pubdate>
';
		header('Content-type: application/xml');
		$simplexml->title = $_SESSION['config']['sitename'].' :: Flux RSS des news';
		$q_nrss = $db->load_query('news_select_rss', array('news.start' => '0', 'news.limit' => '20', 'site.id' => $_SESSION['s_data']['site_id']));
		if($db->count_rows($q_nrss) > 0) {
			while($data = $db->fetch($q_nrss)) {
				extract($data);
				$title = stripslashes($news_title);
				$link = 'http://'.$_SERVER['HTTP_HOST'].'/'.rewrite_link('news', array('action' => 'view', 'id' => $news_id));
				$pubdate = date("D, d M Y H:i:s +0100", $news_date);
				$desc = substr($news_content, 0, 300).'...';
				$rss .= <<<XML
  <item>
	  <title>$title</title>
	  <link>$link</link>
	  <pubDate>$pubdate</pubDate>
	  <description><![CDATA[$desc]]></description>
  </item>
XML;
			}
		}
		$rss .= <<<XML
</channel>
</rss>
XML;
		echo $rss;
	}
?>
Certes c'est pas ce qu'il y a de plus propre mais au moins, ca fonctionne selon mes exigences...

Mammouth du PHP | 2937 Messages

16 janv. 2007, 14:55

Autre solution, Morgan: coder en UTF-8.

ViPHP
ViPHP | 1961 Messages

16 janv. 2007, 15:15

Bonjour,

Une autre solution, PEAR-XLM-RSS
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 1511 Messages

16 janv. 2007, 20:06

Ok je vais regarder de ce coté ;)