RSS Feed Creator: the feed contains invalid XML code

Gesperrt
DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

RSS Feed Creator: the feed contains invalid XML code

Beitrag 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
Zuletzt geändert von DEDE am Mi 10. Mai 2006, 15:06, insgesamt 2-mal geändert.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm ?
bei der url sehe ich aber keinen rss feed im xml format...
*** make your own tools (wishlist :: thx)
DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Beitrag 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
DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Beitrag von DEDE »

Interessant ist, dass der RSS-Reader von Trillian darstellt, die Reader von InternetExplorer und Opera aber nicht.

Dede
pelle
Beiträge: 16
Registriert: Mo 2. Aug 2004, 12:49
Wohnort: Bochum
Kontaktdaten:

Beitrag 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
DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Beitrag von DEDE »

Nope. Habe Deine Änderung eingetragen, doch er mault noch immer.

Schad.

Dede
DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Beitrag von DEDE »

Es hat was mit der Maskierung der Umlaute zu tun ... nur wie bekomme ich die aus dem RSS Feed?

:?:
Dede
pelle
Beiträge: 16
Registriert: Mo 2. Aug 2004, 12:49
Wohnort: Bochum
Kontaktdaten:

Beitrag 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
DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Beitrag 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
nonano
Beiträge: 43
Registriert: Do 13. Apr 2006, 17:45
Kontaktdaten:

Beitrag 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
DEDE
Beiträge: 314
Registriert: Do 19. Feb 2004, 16:15
Kontaktdaten:

Beitrag von DEDE »

Dicken Dank!

Dede
nonano
Beiträge: 43
Registriert: Do 13. Apr 2006, 17:45
Kontaktdaten:

Title-Probleme?

Beitrag von nonano »

Ich verweise aus gegebenem Anlass mal auf mein Beitrag zum Thema Title-Tags in RSS-Feeds
Knigge
Beiträge: 8
Registriert: Sa 4. Mär 2006, 17:51
Wohnort: Münsterland
Kontaktdaten:

Beitrag 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
Meykoenig
Beiträge: 11
Registriert: Do 21. Sep 2006, 08:54
Wohnort: Stuttgart
Kontaktdaten:

Umlaute im RSS-Feed

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