I'm trying to grab various rss feeds but some of them display special chars with their char codes. I try str replace and it works in some cases, but i cannot seem to fixt the html chars: '<' and '>'
see page here
here is my code:
<?
if($type==""){
$type="CNN";
}
?>
<table width="100%" border="0" cellpadding="1" cellspacing="0">
<tr>
<td><table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><b>News Feeds:</b>
· <a class="<?if ($type=="CNN"){?>sel<?}?>menu" href="default.php?page=newsfeed&type=CNN&menu=news">CNN</a> · <a class="<?if ($type=="BBC"){?>sel<?}?>menu" href="default.php?page=newsfeed&type=BBC&menu=news">BBC</a> · <a class="<?if ($type=="Wired"){?>sel<?}?>menu" href="default.php?page=newsfeed&type=Wired&menu=news">Wired</a> · <a class="<?if ($type=="DVD"){?>sel<?}?>menu" href="default.php?page=newsfeed&type=DVD&menu=news">DVD's</a> · <a class="<?if ($type=="Automotive"){?>sel<?}?>menu" href="default.php?page=newsfeed&type=Automotive&menu=news">Automotive</a>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td><?php
switch ($type) {
case "BBC";
$URL = "http://www.bbc.co.uk/syndication/feeds/news/ukfs_news/world/rss091.xml";
break;
case "Wired";
$URL = "http://www.wired.com/news/feeds/rss2/0,2610,,00.xml";
break;
case "CNN";
$URL = "http://rss.syntechsoftware.com/cnn.xml";
break;
case "DVD";
$URL = "http://www.digitallyobsessed.com/doc.rss";
break;
}
echo "<p class='header'><b>$type News:</b><br>";
?>
</td>
</tr>
<tr>
<td bgcolor="#ff0000"><img src="img/invis_pix.gif" width="1" height="1"></td>
</tr>
<tr>
<td> <table width="100%" border="0" cellpadding="1" cellspacing="0">
<tr>
<td><?php
class RSSParser {
var $insideitem = false;
var $tag = "";
var $title = "";
var $description = "";
var $link = "";
function startElement($parser, $tagName, $attrs) {
if ($this->insideitem) {
$this->tag = $tagName;
} elseif ($tagName == "ITEM") {
$this->insideitem = true;
}
}
function endElement($parser, $tagName) {
if ($tagName == "ITEM") {
printf("<p><b><a href='%s' target=\"_blank\">%s</a></b>",
trim($this->link),htmlspecialchars(trim($this->title)));
printf("</br>%s</p>",htmlspecialchars(trim($this->description)));
$this->title = "";
$this->description = "";
$this->link = "";
$this->insideitem = false;
}
}
function characterData($parser, $data) {
if ($this->insideitem) {
switch ($this->tag) {
case "TITLE":
$this->title .= $data;
break;
case "DESCRIPTION":
$data = str_replace ("Double-Click for information on ","", $data);
$data = str_replace ("&","", $data);
//$data = str_replace ("lt;",">", $data);
//$data = str_replace ("gt;","<", $data);
$data = str_replace ("#151;","", $data);
$data = str_replace ("#36;","$", $data);
$this->description .= $data;
break;
case "LINK":
$this->link .= $data;
break;
}
}
}
}
$xml_parser = xml_parser_create();
$rss_parser = new RSSParser();
xml_set_object($xml_parser,&$rss_parser);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("$URL","r")
or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);
?>
</td>
</tr>
</table>
</td>
</tr>
</table></td>
</tr>
</table>