#!/usr/bin/perl
# Blosxom
-# Author: Rael Dornfest <rael@oreilly.com>
-# Version: 2.0.2
+# Author: Rael Dornfest (2003), The Blosxom Development Team (2005-2008)
+# Version: 2.1.0
# Home/Docs/Licensing: http://blosxom.sourceforge.net/
# Development/Downloads: http://sourceforge.net/projects/blosxom
use Time::Local;
use CGI qw/:standard :netscape/;
-$version = "2.0.2";
+$version = "2.1.0";
# Should I encode entities for xml content-types? (plugins can turn this off if they do it themselves)
$encode_xml_entities = 1;
}
if ( $encode_xml_entities && $content_type =~ m{\bxml\b} ) {
+ # Escape special characters inside the <link> container
+
+ # The following line should be moved more towards to top for
+ # performance reasons -- Axel Beckert, 2008-07-22
+ my $url_escape_re = qr([^-/a-zA-Z0-9:._]);
+
+ $url =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg;
+ $path =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg;
+ $fn =~ s($url_escape_re)(sprintf('%%%02X', ord($&)))eg;
# Escape <, >, and &, and to produce valid RSS
my %escape = (
'<' => '<',
'>' => '>',
'&' => '&',
- '"' => '"'
+ '"' => '"',
+ "'" => '''
);
my $escape_re = join '|' => keys %escape;
$title =~ s/($escape_re)/$escape{$1}/g;
$body =~ s/($escape_re)/$escape{$1}/g;
+ $url =~ s/($escape_re)/$escape{$1}/g;
+ $path =~ s/($escape_re)/$escape{$1}/g;
+ $fn =~ s/($escape_re)/$escape{$1}/g;
}
$story = &$interpolate($story);
rss story <pubDate>$dw, $da $mo $yr $ti:00 $utc_offset</pubDate>
rss story <link>$url/$yr/$mo_num/$da#$fn</link>
rss story <category>$path</category>
-rss story <guid isPermaLink="false">$path/$fn</guid>
+rss story <guid isPermaLink="true">$url$path/$fn</guid>
rss story <description>$body</description>
rss story </item>