Mal wieder RSS und Umlaute

Gesperrt
kptkip
Beiträge: 192
Registriert: Mi 8. Jun 2005, 18:02
Kontaktdaten:

Mal wieder RSS und Umlaute

Beitrag 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.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag 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));
*** make your own tools (wishlist :: thx)
kptkip
Beiträge: 192
Registriert: Mi 8. Jun 2005, 18:02
Kontaktdaten:

Beitrag von kptkip »

stimmt ;-) Danke!
o
Beiträge: 6
Registriert: Di 24. Apr 2007, 23:03
Kontaktdaten:

Beitrag 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...
salsa
Beiträge: 165
Registriert: Mi 27. Apr 2005, 15:47
Wohnort: Dortmund
Kontaktdaten:

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