html code ausgeben statt interpretieren
Stuffi
- php
Hallo,
habe ein script gefunden mit dessen Hilfe ich einen RSS-Feed auslesen kann.
<?php
/*
Nutzung dieses Scripts nur gestattet, wenn Kommentare (PHP und HTML) nicht gelöscht werden, oder ein Link zu folgender Adresse gesetzt wird:
URL: http://www.web-spirit.de/webdesign-tutorial/7/RSS-Feed-auslesen-mit-PHP
Beschreibung: RSS Feed auslesen mit PHP
Autor: Sebastian Gollus
Internet: http://www.web-spirit.de
Version: 1.0.200905
*/
// Funktionsaufruf z.B.: getRssfeed("http://www.web-spirit.de/web-spirit.xml","web-spirit","auto",3,3);
function getRssfeed($rssfeed, $cssclass="", $encode="auto", $anzahl=10, $mode=0)
{
// $encode e[".*"; "no"; "auto"]
// $mode e[0; 1; 2; 3]:
// 0 = nur Titel und Link der Items weden ausgegeben
// 1 = Titel und Link zum Channel werden ausgegeben
// 2 = Titel, Link und Beschreibung der Items werden ausgegeben
// 3 = 1 & 2
// Zugriff auf den RSS Feed
$data = @file($rssfeed);
$data = implode ("", $data);
if(strpos($data,"</item>") > 0)
{
preg_match_all("/<item.*>(.+)<\/item>/Uism", $data, $items);
$atom = 0;
}
elseif(strpos($data,"</entry>") > 0)
{
preg_match_all("/<entry.*>(.+)<\/entry>/Uism", $data, $items);
$atom = 1;
}
// Encodierung
if($encode == "auto")
{
preg_match("/<?xml.*encoding=\"(.+)\".*?>/Uism", $data, $encodingarray);
$encoding = $encodingarray[1];
}
else
{$encoding = $encode;}
echo "<!-- RSS Feed Script von Sebastian Gollus: http://www.web-spirit.de/webdesign-tutorial/7/RSS-Feed-auslesen-mit-PHP -->\n";
//echo "<div class=\"rssfeed_".$cssclass."\">\n";
// Titel und Link zum Channel
if($mode == 1 || $mode == 3)
{
if(strpos($data,"</item>") > 0)
{
$data = preg_replace("/<item.*>(.+)<\/item>/Uism", '', $data);
}
else
{
$data = preg_replace("/<entry.*>(.+)<\/entry>/Uism", '', $data);
}
preg_match("/<title.*>(.+)<\/title>/Uism", $data, $channeltitle);
if($atom == 0)
{
preg_match("/<link>(.+)<\/link>/Uism", $data, $channellink);
}
elseif($atom == 1)
{
preg_match("/<link.*alternate.*text\/html.*href=[\"\'](.+)[\"\'].*\/>/Uism", $data, $channellink);
}
$channeltitle = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $channeltitle);
$channellink = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $channellink);
echo '<h1><a href=\"".$channellink[1]."\" title=\"';
if($encode != "no")
{echo htmlentities($channeltitle[1],ENT_QUOTES,$encoding);}
else
{echo $channeltitle[1];}
echo '\">';
if($encode != "no")
{echo htmlentities($channeltitle[1],ENT_QUOTES,$encoding);}
else
{echo $channeltitle[1];}
echo '</a></h1>\n';
}
// Titel, Link und Beschreibung der Items
foreach ($items[1] as $item) {
preg_match("/<title.*>(.+)<\/title>/Uism", $item, $title);
if($atom == 0)
{
preg_match("/<link>(.+)<\/link>/Uism", $item, $link);
}
elseif($atom == 1)
{
preg_match("/<link.*alternate.*text\/html.*href=[\"\'](.+)[\"\'].*\/>/Uism", $item, $link);
}
if($atom == 0)
{
preg_match("/<description>(.*)<\/description>/Uism", $item, $description);
}
elseif($atom == 1)
{
preg_match("/<summary.*>(.*)<\/summary>/Uism", $item, $description);
}
$title = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $title);
$description = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $description);
$link = preg_replace('/<!\[CDATA\[(.+)\]\]>/Uism', '$1', $link);
//echo "<p class=\"link\">\n";
echo '<a href=\"".$link[1]."\" title=\"';
if($encode != "no")
{echo htmlentities($title[1],ENT_QUOTES,$encoding);}
else
{echo $title[1];}
echo '\">';
if($encode != "no")
{echo htmlentities($title[1],ENT_QUOTES,$encoding).'</a>\n';}
else
{echo $title[1]."</a>\n";}
echo ' \ ';
//echo "</p>\n";
if($mode == 2 || $mode == 3 && ($description[1]!="" && $description[1]!=" "))
{
echo '<p class=\"description\">\n';
if($encode != "no")
{echo htmlentities($description[1],ENT_QUOTES,$encoding).'\n';}
else
{echo $description[1];}
echo '</p>\n';
}
if ($anzahl-- <= 1) break;
}
//echo "</div>\n\n";
}
$news = htmlentities(getRssfeed("http://www.sport1.de/de_1/fussball/rss.xml","","auto",10,0));
?>
Den durch das Skript generierten html code möchte weiterverwenden und daher nicht vom Server interpretiert haben.
Grundsätzlich funktioniert das ganze ja über htmlentities(). Aber hier will es einfach nicht auch wenn ich " in ' umwandel bzw. " durch ' ersetze.
Hat irgendwiener eine Idee? Ich weiß nicht mehr weiter...
Hello,
Hat irgendwiener eine Idee? Ich weiß nicht mehr weiter...
Der PHP-Interpreter kennt unterschiedliche Möglichkeiten, Texte als solche zu kennzeichnen.
Such mal nache "heredoc-syntax".
und dann schau Dir das "Strings-Manual" im PHP-Handbuch an
http://php.net/manual/de/language.types.string.php
Für die Ausgabe von Code gibt es auch eine Funktion
http://de3.php.net/manual/de/function.highlight-file.php
und
http://de3.php.net/manual/de/function.highlight-string.php
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi,
$news = htmlentities(getRssfeed("http://www.sport1.de/de_1/fussball/rss.xml","","auto",10,0));
?>[/code]Den durch das Skript generierten html code möchte weiterverwenden und daher nicht vom Server interpretiert haben.
Grundsätzlich funktioniert das ganze ja über htmlentities(). Aber hier will es einfach nicht auch wenn ich " in ' umwandel bzw. " durch ' ersetze.
Du hast da glaube ich was falsch verstanden. Der Server "interpretiert" eigentlich überhaupt kein HTML. Wenn, dann macht das der Client, idR. also ein Browser.
Arbeite bitte dedlfix' Artikel zur Kontextwechsel-Thematik mal durch, insb. natürlich die Stellen, wo es um den Kontext HTML geht. Was dort steht, ist wichtig für's Grundverständnis.
Ich vermute, dein Problem ist, dass im Script Daten für den Kontext HTML behandelt werden, das aber eigentlich gar nicht das ist, was du willst.
Im Script wird mehrfach htmlentities angewendet, an den meisten Stellen von einem Parameter $encode abhängig gemacht, und ganz am Ende noch mal pauschal auf das gesamte Ergebnis,
$news = htmlentities(getRssfeed("http://www.sport1.de/de_1/fussball/rss.xml","","auto",10,0));
Wenn das nicht das ist, was du bewirken willst, dann entferne die Anwendung der Funktion auf's Endergebnis. Falls das noch nicht ausreicht, dann schlage die Erklärung der Funktionsparameter nach.
MfG ChrisB