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°
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.
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.
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(' ', '', $tmp);
if ($tmp == '') {
return true;
} else {
return false;
}
}
function prepareStringForOutput($sIn) {
$sIn = str_replace(' ',' ',$sIn);
$sIn = str_replace(' ',' ',$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 ...
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(' ',' ',$sIn);
$sIn = str_replace(' ',' ',$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.