Page 1 sur 1

Problème avec le caractére &

Posté : 15 janv. 2007, 20:21
par momox
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 ;)

Posté : 15 janv. 2007, 20:51
par Cyrano
Oui, tu dois utiliser les entités HTML : "&" => "&" par exemple.

Posté : 15 janv. 2007, 21:46
par momox
Ok je vais essayer ;)
@+

Posté : 15 janv. 2007, 22:13
par momox
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 ;)
@+

Posté : 16 janv. 2007, 11:50
par Victor BRITO
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[ ]]>.

Posté : 16 janv. 2007, 13:45
par momox
Pas bête ^^
Pourtant je l'ai utilisé pas plus tard qu'hier :lol: le <![cdata[
@+

Posté : 16 janv. 2007, 14:26
par momox
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[
@+

Posté : 16 janv. 2007, 14:37
par Victor BRITO
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:").

Posté : 16 janv. 2007, 14:49
par momox
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...

Posté : 16 janv. 2007, 14:55
par Victor BRITO
Autre solution, Morgan: coder en UTF-8.

Posté : 16 janv. 2007, 15:15
par Ajoloca
Bonjour,

Une autre solution, PEAR-XLM-RSS

Posté : 16 janv. 2007, 20:06
par momox
Ok je vais regarder de ce coté ;)