Seite 1 von 1

RSS Feed Creator: the feed contains invalid XML code

Verfasst: Mi 10. Mai 2006, 12:04
von DEDE
Hallo allerseits,

ich hab mir nen Wolf gesucht. EHRLICH.
Ich finde keine Lösung zu den Umlauten, die ich diesem Creator zuschreiben kann.

Das Thema ist doch sicher auch bei anderen "bekannt", oder?

http://www.gruene-ebe.de/464cms/gruen/f ... &idart=534

Büddeee ... Schnüff°
:cry:

Sunshine ...
Dede

Verfasst: Mi 10. Mai 2006, 13:55
von emergence
ähm ?
bei der url sehe ich aber keinen rss feed im xml format...

Verfasst: Mi 10. Mai 2006, 15:08
von DEDE
Sorry ... da hat sich ein Fehler eingeschlichen.

Die richtige URL lautet: http://www.gruene-ebe.de/464cms/gruen/f ... &idart=534

Ich habe es auch in der 1. Nachricht geändert.

:D
Dede

Verfasst: Mi 10. Mai 2006, 15:19
von DEDE
Interessant ist, dass der RSS-Reader von Trillian darstellt, die Reader von InternetExplorer und Opera aber nicht.

Dede

Verfasst: Mi 10. Mai 2006, 16:50
von pelle
Hallo,

was steht denn bei Dir in der Ausgabe des Moduls FeedCreator so ca. Zeile 60 unter #Output feed header ?
Ich hatte das selbe Problem und glaube es mit der Zeile behoben zu haben.

Code: Alles auswählen

echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
MfG

Verfasst: Mi 10. Mai 2006, 17:37
von DEDE
Nope. Habe Deine Änderung eingetragen, doch er mault noch immer.

Schad.

Dede

Verfasst: Mi 10. Mai 2006, 17:38
von DEDE
Es hat was mit der Maskierung der Umlaute zu tun ... nur wie bekomme ich die aus dem RSS Feed?

:?:
Dede

Verfasst: Mi 10. Mai 2006, 19:17
von pelle
Auch con_code geleert?

Hier der Code der bei mir die Umlaute richtig ausliest. Aber vorsicht, es wird auch die Subheadline ausgelesen, nicht der html_text.

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname  :      RSS Feed generator
* Author(s)   :     Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
************************************************/

#Includes
cInclude('classes', 'class.article.php');

#Get settings
$rss_cat = "CMS_VALUE[0]";
$rss_sortby = "CMS_VALUE[1]";
$rss_sortorder = "CMS_VALUE[2]";
$rss_include_start_article = "CMS_VALUE[3]";
$rss_title = "CMS_VALUE[4]";
$rss_link = "CMS_VALUE[5]";
$rss_description = "CMS_VALUE[6]";
$rss_language = "CMS_VALUE[7]";
$rss_copyright = "CMS_VALUE[8]";
$rss_image_title = "CMS_VALUE[9]";
$rss_image_url = "CMS_VALUE[10]";
$rss_image_link = "CMS_VALUE[11]";
$rss_managingEditor = "CMS_VALUE[12]";
$rss_webMaster = "CMS_VALUE[13]";
$rss_maxCount = "CMS_VALUE[14]";
$rss_ttl = "CMS_VALUE[15]";
$rss_description_length = "CMS_VALUE[16]";

#Check settings
if ($rss_maxCount == '') {
	$rss_maxCount = 999;
}

if ($rss_description_length=='') {
	$rss_description_length = 200;
}

#Get feed image
if ($rss_image_link != '') {
	if (substr(strtolower($rss_image_link), 0, 7) != 'http://') {
		$rss_image_link = 'http://'.$rss_image_link;
	}
}

if ($rss_image_url != '') {
	$sql = "SELECT * FROM ".$cfg['tab']['upl']." WHERE idupl = ".$rss_image_url;
	$db->query($sql);
	if ($db->next_record()) {
		$rss_image_url = $cfgClient[$client]['path']['htmlpath'].$cfgClient[$client]['upl']['frontendpath'].$db->f("dirname").$db->f("filename");
		$rss_image_fs = $cfgClient[$client]['path']['frontend'].$cfgClient[$client]['upl']['frontendpath'].$db->f("dirname").$db->f("filename");
	}
}

#Output feed header
header("Content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
";
echo "<rss version=\"2.0\">
";
echo "<channel>
";

echo "<title>".prepareStringForOutput($rss_title)."</title>
";
echo "<copyright>".prepareStringForOutput($rss_copyright)."</copyright>
";
echo "<link>".prepareStringForOutput($rss_link)."</link>
";
echo "<description>".prepareStringForOutput($rss_description)."</description>
";
echo "<language>".prepareStringForOutput($rss_language)."</language>
";
echo "<lastBuildDate>".date('D, d M Y H:i:s T')."</lastBuildDate>
";
echo "<pubDate>".date('D, d M Y H:i:s T')."</pubDate>
";
echo "<generator>Contenido CMS</generator>
";
echo "<managingEditor>".$rss_managingEditor."</managingEditor>
";
echo "<webMaster>".$rss_webMaster."</webMaster>
";
echo "<ttl>".$rss_ttl."</ttl>
";
echo "<image>
";
echo "<title>".prepareStringForOutput($rss_image_title)."</title>
";
list ($width, $height, $type, $attr) = getimagesize($rss_image_fs);
echo "<width>".$width."</width>
";
echo "<height>".$height."</height>
";
echo "<url>".prepareStringForOutput($rss_image_url)."</url>
";
echo "<link>".prepareStringForOutput($rss_image_link)."</link>
";
echo "</image>
";

#Output articles
if ($rss_cat != '') {
	if ($rss_include_start_article != '') {
		$b_include_start_article = true;
	} else {
		$b_include_start_article = false;
	}
	$options = array ('idcat' => $rss_cat, "start" => $b_include_start_article, "order" => $rss_sortby, "direction" => $rss_sortorder);
	$list = new ArticleCollection($options);
	$count = $list->count;

	if ($count > 0) {
		$aArticleList = array ();
		$aArticleList = $list->articles;
		$aTmpArticleList = array ();
		$index = 1;
		foreach ($aArticleList as $value) {
			if ($index <= $rss_maxCount) {
				$tmp_article = new Article($value, $client, $lang);
				$headline = '';
				$i = 1;
				while (($i<20) && (is_empty($headline))) {
					$headline = strip_tags($tmp_article->getContent('CMS_HTMLHEAD', $i));
					$i++;
				}
					
				$i = 1;
				while (($i<20) && (is_empty($headline))) {
					$headline = strip_tags($tmp_article->getContent('CMS_TEXT', $i));
					$i++;
				}
				
				$description = '';
				$i = 1;
				while (($i<20) && (is_empty($description))) {
					$description = strip_tags($tmp_article->getContent('CMS_HTMLHEAD',2, $i));
					$i++;
				}

				$description = capiStrTrimAfterWord($description, $rss_description_length);

				$pub_date = $tmp_article->getField("created");
				$pub_date = strtotime($pub_date);
				$pub_date = date('D, d M Y H:i:s T', $pub_date);
				if ($headline != '') {
					$headline = prepareStringForOutput($headline);
					$link = str_replace('&','&',$cfgClient[$client]['path']['htmlpath']."front_content.php?idcat=$rss_cat&idart=$value&client=$client&lang=$lang");
					echo "<item>
";
					echo "<title>".prepareStringForOutput($headline)."</title>
";
					echo "<description>".prepareStringForOutput($description)."</description>
";
					echo "<link>".$link."</link>
";
					echo "<pubDate>".$pub_date."</pubDate>
";
					$t1 = $cfg["tab"]["art_lang"];
					$t2 = $cfg["tab"]["phplib_auth_user_md5"];
					$sql = "SELECT ".$t2.".realname FROM ".$t1." INNER JOIN ".$t2." ON ".$t1.".author = ".$t2.".username WHERE (".$t1.".idart=$value) AND (".$t1.".idlang=$lang)";
					$db->query($sql);
					
					if ($db->next_record()) {
						$author = prepareStringForOutput($db->f("realname"));
					} else {
						$author = '';
					}
					echo "<author>".$author."</author>
";
					echo "</item>
";
				}
			}
			$index ++;
		}
	}
}

echo "</channel>
";
echo "</rss>
";

function is_empty($in_str) {

	$tmp = trim($in_str);
	$tmp = strip_tags($tmp);
	$tmp = str_replace(chr(13).chr(10), '', $tmp);
	$tmp = str_replace('&nbsp;', '', $tmp);

	if ($tmp == '') {
		return true;
	} else {
		return false;
	}
}

function prepareStringForOutput($sIn) {

	$sIn = str_replace('&nbsp;',' ',$sIn);
	$sIn = str_replace('&nbsp;',' ',$sIn);
	#$sIn = str_replace(chr(13).chr(10),' ',$sIn);
	#return htmlspecialchars($sIn, ENT_QUOTES);
	#return htmlnumericalentities(html_entity_decode($sIn));
    return str_replace('&','&',htmlnumericalentities($sIn));
}

function htmlnumericalentities($str) {

	return preg_replace('/[^!-%\x27-;=?-~ ]/e', '"&#".ord("$0").chr(59)', $str);
}
?>
MfG

Verfasst: Do 11. Mai 2006, 16:08
von DEDE
So, da war leider auch nichts genaues Dabie für diese Geshcichte:

Nun sagt auch noch Firefox:

Mit dieser XML-Datei sind anscheinend keine Style-Informationen verknüpft. Nachfolgend wird die Baum-Ansicht des Dokuments angezeigt.

Ich nix verstehen ... :roll:

Dede

Verfasst: So 21. Mai 2006, 07:16
von nonano
Firefox sagt das, weil RSS-Feeds tatsächlich keine Style-Definitionen beinhalten. Da FF keinen integrierten RSS-Reader hat, kann er das dann auch nur so unübersichtlich darstellen.

Guckle mal nach der FF-Extension: feedview

Verfasst: So 21. Mai 2006, 12:54
von DEDE
Dicken Dank!

Dede

Title-Probleme?

Verfasst: Fr 23. Jun 2006, 06:48
von nonano
Ich verweise aus gegebenem Anlass mal auf mein Beitrag zum Thema Title-Tags in RSS-Feeds

Verfasst: Mo 24. Jul 2006, 19:25
von Knigge
Hallo Dede,

Dein RSS Creater scheint doch nun einwandfrei zu funktionieren. Könntest du vielleicht einmal den gesamten Code hier posten.
Auch ich habe das Problem mit den Umlauten und komme irgendwie nicht weiter.

Viele Grüße
Knigge

Umlaute im RSS-Feed

Verfasst: Do 3. Apr 2008, 12:58
von Meykoenig
Der RSS Creater funktioniert so, mit nummerischen Entities, formal richtig, das erzeugte XML ist wohlgeformt.

Leider werden von vielen RSS-Lesern, auch dem von Contenido, die nummerischen Entities nicht in die Sonderzeichen zurück verwandelt sondern der Entity-Code ausgegeben.

Wenn im XML-Kopf das richtige Encoding angegeben ist sollte auf die Ausgabe der Sonderzeichen als Entities verzichtet werden, ausgenommen der reservierten Zeichen ( <,>,".',&) die für wohlgeformtes XML immer in Entities umgewandelt werden müssen (dafür die PHP-Funktion htmlspecialchars() ).

Ich verwende nun folgenden Code:

Code: Alles auswählen

function prepareStringForOutput($sIn) {
   $sIn = str_replace('&nbsp;',' ',$sIn);
   $sIn = str_replace('&nbsp;',' ',$sIn);
   #$sIn = str_replace(chr(13).chr(10),' ',$sIn);
   $sIn = str_replace('&','&',$sIn);
   $sIn = html_entity_decode($sIn, ENT_QUOTES, "ISO-8859-1");
   return htmlspecialchars($sIn, ENT_QUOTES);
}
Die function htmlnumericalentities ist dann unnötig geworden.

Um einen UT8-Feed zu erzeugen müsste man das Encoding im XML-Kopf ändern und die Ausgabe mit der PHP-Funktion utf8_encode() übersetzten.
Das habe ich aber noch nicht ausprobiert.