Seite 1 von 1

Mal wieder RSS und Umlaute

Verfasst: Fr 27. Apr 2007, 10:36
von kptkip
Ich habe einige Artikel zum Thema Umlauteprobleme in der RSS-Ausgabe gelesen und habe mich gewundert, auf welche Lösungen mitunter verwiesen wird.

Es handelt sich m.E. um folgenden Code-Teil in der Ausgabe des Moduls:

Code: Alles auswählen

foreach ($rss->getItems() as $item)
{
   if ($i < $FeedMaxItems) {
       $tpl->set("d", "TITLE",utf8_decode($item['title']));
       $tpl->set("d", "LINK",htmlentities($item['link'],ENT_QUOTES));
       $tpl->set("d", "DESCRIPTION", utf8_decode(htmlentities($item['description'],ENT_QUOTES)));
       $tpl->set("d", "READ_ON", mi18n("weiterlesen"));
       $tpl->next();
   }
   $i++;
} 
Das Problem liegt in der Zeile:

Code: Alles auswählen

$tpl->set("d", "DESCRIPTION", utf8_decode(htmlentities($item['description'],ENT_QUOTES)));
Wenn man das ganze umdreht:

Code: Alles auswählen

$tpl->set("d", "DESCRIPTION", htmlentities(utf8_decode($item['description'],ENT_QUOTES)));
ergibt es doch erst Sinn. Denn ich wandle doch erst von UTF-8 nach ISO und mache danach die Konvertierung nach HTML und nicht anders herum.

Damit habe ich zumindest meine Zeichenprobleme gelöst.

Verfasst: Fr 27. Apr 2007, 11:32
von emergence
ähm

Code: Alles auswählen

$tpl->set("d", "DESCRIPTION", htmlentities(utf8_decode($item['description'],ENT_QUOTES)));
stimmt nicht...

die klammer ist falsch gesetzt...

Code: Alles auswählen

$tpl->set("d", "DESCRIPTION", htmlentities(utf8_decode($item['description']),ENT_QUOTES));

Verfasst: Fr 27. Apr 2007, 22:56
von kptkip
stimmt ;-) Danke!

Verfasst: Do 3. Mai 2007, 01:22
von o
es gibt aber manchmal noch ein anderes problem. beim preparsing wird utf-8 nicht korrekt erkannt wenn zwischen der angabe des codes und der schliessenden klammer leerzeichen stehen. keine ahnung ob das korrekt ist, wenn man in den parser für den code noch eine leerzeichenerkennung reinbaut ungefähr so

Code: Alles auswählen

$regExp = "/<\?xml.*encoding=[\"\'](.*)[\"\'].{0,1}\?>/i";
dann kommt da utf-8 raus. mein problem hat es trotzdem nicht gelöst, die umlaute waren weiterhin falsch. so hab ich mir für utf-8 (das krieg ich ja nun sauber), noch ne if abfrage gebaut, ungefähr so

Code: Alles auswählen

foreach ($rss->getItems() as $item)

{
        if ($matches[1] == "UTF-8") {
               $sFeedTitle = utf8_decode($item['title']);
               $sFeedLink = utf8_decode($item['link']);
               $sFeedDesc = utf8_decode($item['description']);
        } else {
               $sFeedTitle = $item['title'];
               $sFeedLink = $item['link'];
               $sFeedDesc = $item['description'];
        }

	if ($i < $FeedMaxItems) {
	$tpl->set("d", "TITLE",htmlentities($sFeedTitle,ENT_QUOTES));
    	$tpl->set("d", "LINK", htmlentities($sFeedLink,ENT_QUOTES));
    	$tpl->set("d", "DESCRIPTION", htmlentities($sFeedDesc,ENT_QUOTES));
    	$tpl->set("d", "READ_ON", mi18n("weiterlesen"));
	    $tpl->next();
	}
	$i++;
}
und die variablen innerhalb des template settings verwendet. find ich sauberer als direkt in das set ein utf-8 decode einzubauen. wenn man das mal zu ende denkt, braucht man ansonsten ja für jeden weiteren exotischen zeichensatz ein modul und das kann es ja nicht sein...

Verfasst: Di 21. Aug 2007, 10:25
von salsa
Mit der Abfrage habe ich keinen Erfolg. Bei mir fluppt dies

Code: Alles auswählen

foreach ($rss->getItems() as $item)
{
   if ($i < $FeedMaxItems) {
       $tpl->set("d", "TITLE",utf8_decode($item['title']));
       $tpl->set("d", "LINK",htmlentities($item['link'],ENT_QUOTES));
       $tpl->set("d", "DESCRIPTION",utf8_decode($item['description']));
       $tpl->set("d", "READ_ON", mi18n("weiterlesen"));
       $tpl->next();
   }
   $i++;
}
Ich brauche allerdings ein eigenes Tempate (rss_read_utf8) für rss-codierte Feeds..