Stuffi: html code ausgeben statt interpretieren

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...

  1. 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

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. 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

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?