Sie sind in der Kategorie Blosxom
Kategorien:
Blog · Web · Webapplikationen · Blosxom

Dienstag, 01. Juli 2008

Blosxom-Patch: HTML als Inhalt in RSS

Tags: , , ,
Nachdem ich schon von der Blosxom-Community gefragt wurde, ob ich nicht auch meine Patches zur Verfügung stelle, will ich das mal nach und nach machen. Hier ein Patch, um RSS mit HTML-Inhalten zu erzeugen.

Englisch version of blog entry.

Normalerweise verwende ich HTML als Inhalt für die Blogeinträge. Nun existiert das Problem, dass die interne Implementierung von RSS leider das HTML so rekodiert, dass alles als Text erscheint. Links, Textauszeichnungen etc. sind also nicht mehr möglich.

Mit dem Perl-Modul HTML::TagFilter geht das aber; HTML::TagFilter lässt konfigurierbar nur bestimmtes HTML zu.

HTML::Tagfilter basiert auf HTML-Parser und sollte sich zusätzlich (wenn nicht schon vorhanden) selbst einfach installieren lassen, notfalls den Hoster bitten, es hinzuzufügen.

Mein Patch bezieht sich auf Blosxom Rev. 1.69 (Jun 24 00:10:21 2008 UTC) aus dem CVS-Repo von Sourceforge.

Die Codezeilen 663–675:

if ( $encode_xml_entities && $content_type =~ m{\bxml\b} ) {

     # Escape <, >, and &, and to produce valid RSS
     my %escape = (
       '<' => '&lt;',
       '>' => '&gt;',
       '&' => '&amp;',
       '"' => '&quot;'
     );
     my $escape_re = join '|' => keys %escape;
     $title =~ s/($escape_re)/$escape{$1}/g;
     $body  =~ s/($escape_re)/$escape{$1}/g;
 }

werden ersetzt durch:

## --- 07-2008 Patch von GwenDragon für HTML-Inhalte in RSS ---
##     (c)2008 Lilo von Hanffstengel "GwenDragon"
##     Siehe http://www.gwendragon.de/blog/Web/Webapplikationen/Blosxom/RSS-Patch-fuer-HTML.html
## --------------
if ( $content_type =~ m{\bxml\b} ) {
    my $t = $title;
    my $b = $body;
    eval {
       require HTML::Entities;
       $t = HTML::Entities::decode( $t );
       #$b = HTML::Entities::decode( $b );
                        
       require HTML::TagFilter;
       # and strip off HTML
       my $tf = new HTML::TagFilter;
       $t = $tf->filter( $t );
       $b = $tf->filter( $b );
    };
    if ( not $@ ) { 
       $title = $t;
       $body = $b;
    }
    #
                
    if ( $@ and $encode_xml_entities ) {
       # decode HTML
       $title = HTML::Entities::decode($title);
       $body = HTML::Entities::decode($body);
       #
                        
       # Escape <, >, and &, and to produce valid RSS
       my %escape = (
          '<' => '&lt;',
          '>' => '&gt;',
          '&' => '&amp;',
          '"' => '&quot;'
       );
       my $escape_re = join '|' => keys %escape;
       $title =~ s/($escape_re)/$escape{$1}/g;
       $body  =~ s/($escape_re)/$escape{$1}/g;
    }
                                
}
# -------------

Viel Spaß mit dem Patch. Bei Problemen kann natürlich bei mir nachgefragt werden.
Bitte bei Weitergabe wenigstens den kleinen Hinweis auf mich einbringen.


Kommentar für Blogeintrag

Vorschau des Kommentars

Kommentar

Mit * gekennzeichnete Felder müssen angegeben werden.



(Nur Text ohne Formatierung möglich)

Hinweis zum Datenschutz

Falls es Probleme mit Kommentaren/Trackbacks gibt, bitte ich um eine Beschreibung per E-Mail.

TrackBack-URL: http://www.gwendragon.de/blog/Web/Webapplikationen/Blosxom/RSS-Patch-fuer-HTML.html/trackback

↑Blogeintrag