Seite 1 von 1

RSS Feed Creator-Problem mit Umlauten- Bug?

Verfasst: Fr 13. Jan 2006, 15:14
von moltimer
Hallo Cumminty,

ich habe die RSS Feed Creator bereits fertig und funktionstüchtig eingebaut nach Anleitung hier im Forum. Nachdem ändern einiger Artikel bekomme ich nun folgende Fehlermeldung:

XML-Verarbeitungsfehler: Undefinierte Entität
Adresse: http://s146058036.online.de/contenido/e ... 00c6da1aaf
Zeile Nr. 31, Spalte 50:

Was mache ich falsch bzw. muss ich ändern?

Eingesetzt wird die Version 4.6.2.

Verfasst: Fr 13. Jan 2006, 16:41
von moltimer
Nochmal ich,

ich habe das Problem nun eingegrenzt. Sobald in einem Artikel Umlaute oder Sonderzeichen auftauchen, kommt es im Modul RSS Feed Creator zur obigen Fehlermeldung, un der Feed wird nicht korrekt erstellt.
Ich habe schon einige Foren Einträge bzgl. UTF-8 und IS0 geshen aber nicht verstanden. Ist es ein Browser oder Contenido Problem.

Wäre nett wenn jemand mir nochmal genau den Zusammenhang kurz erläutern könnte und mir die entsprechenden Stellen in Contenido oder im HTML Code zur Änderung posten könnte.

Danke im voraus.


Gruß Moltimer

Verfasst: Fr 13. Jan 2006, 23:51
von moltimer
Hallo Community,

ich kann nicht glauben das keiner dazu eine Idee hat.
Könnte es sogar vielleicht ein Bug sein?

Gruß Moltimer

Verfasst: Sa 14. Jan 2006, 00:34
von HerrB
Da gab es doch schon einen Thread zum RSS-Modul und umlauten. Suche nochmal.

Gruß
HerrB

Verfasst: Sa 14. Jan 2006, 23:23
von moltimer
Liebe Community,

im Contenido Forum habe ich nichts diesbezüglich gefunden.
Allerdings im phpcenter Forum
http://www.phpcenter.de/phorum/read.php ... 86&t=48586
Ich weiss nun dass es mit den Umlauten und Entitäten zusammenhängt und es eine Ungereimtheit im RSS Feed Creator Modul aus dem Beispielmandanten aus Version 4.6.2 sein muss. Sobald die Sonderzeichen HTMl konform umschriben werden kommt es zu diesem Fehler. Schreibt man die Sonderzeichen direkt - also ä, ü etc. kommt dieser Fehler nicht. Es müsste also eine str_replace vorgenommen weden der aus z.B ä ein ä macht - oder so ;-).

Nur leider bin ich noch PHP Anfänger und weiss nicht was ich ändern muss. Da wird es doch bestimmt die eine oder andere Funktion für geben.

Wäre nett wenn mir jemand helfen würde.

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_HTML', $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);
}
?>
Gruß Moltimer

Verfasst: Di 14. Mär 2006, 18:07
von E. Hut
Was ist aus dem Problem geworden? Ich kämpfe damit auch gerade herum.

Zunächst hat der RSS Feed Creator wunderbar gearbeitet. Als ich dann im TEXT(HTML)-Modul die <p>-Tags entfernt habe, gings plötzlich nicht mehr. Mittlerweile geht es auch nach Einfügen der Tags nicht.

Gut am Entfernen der TEXT-Tags war, daß ich endlich keine doppelten Tags mehr hatte - nur leider eben zu Lasten des RSS Feed Creators.

Hm.

E.

Verfasst: Fr 17. Mär 2006, 03:50
von E. Hut
Mein aktueller Workaround:

ich gebe den gewünschtne Artikeltext -meist über die HTML-ansicht von tinymce- ein, speichere, bis ich in der editier-ansicht bin. dann lösche ich den ersten umlaut im text (nur den!), tippe ihn in der editier-ansicht nochmal neu ein, speichere und gut ist.

so läuft der feed creator wunderbar.

gute nacht,

e.

Verfasst: Do 1. Jun 2006, 15:01
von cassiopeia
Ich hab's wie folgt in den Griff gekriegt:

Direkt im Modul (RSS Feed Creator, Ausgabe) nach:

Code: Alles auswählen

function prepareStringForOutput($sIn) { 
diese Zeile zusätzlich eingefügt:

Code: Alles auswählen


$sIn = html_entity_decode($sIn);
Nach dieser Änderung kommt keine Fehlermeldung im Firefox mehr - der IE hatte auch vorher kein Problem. Hoffe, es klappt auch bei Euch.

Gruß CP
--> Version 4.6.8

Verfasst: Fr 3. Nov 2006, 10:32
von derSteffen
Super cassiopeia! Das ist die Lösung! :wink:

Verfasst: Sa 16. Dez 2006, 13:53
von A199M Support
cassiopeia hat geschrieben:Ich hab's wie folgt in den Griff gekriegt:

Direkt im Modul (RSS Feed Creator, Ausgabe) nach ...
Der Tipp hat mir sehr geholfen. :) Besten Dank.

Verfasst: Fr 28. Sep 2007, 09:03
von ZuMe
Mir auch! Danke cassiopeia. :mrgreen: