X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fblosxom.git;a=blobdiff_plain;f=blosxom.cgi;h=590e0f2b4adfd76dc2f0220daecd96449266bfb7;hp=160d4edebba298e99b97c3685426062e1e2c098d;hb=94acc2bbef346aacd861c5dd3cb03dc260294c14;hpb=d9081717253b7bb2696e130ea1ee25e7e85d8e33 diff --git a/blosxom.cgi b/blosxom.cgi index 160d4ed..590e0f2 100755 --- a/blosxom.cgi +++ b/blosxom.cgi @@ -2,7 +2,7 @@ # Blosxom # Author: Rael Dornfest (2002-2003), The Blosxom Development Team (2005-2009) -# Version: 2.1.2 ($Id: blosxom.cgi,v 1.95 2009/03/08 01:28:06 xtaran Exp $) +# Version: 2.1.2 ($Id: blosxom.cgi,v 1.98 2009/07/19 17:18:37 xtaran Exp $) # Home/Docs/Licensing: http://blosxom.sourceforge.net/ # Development/Downloads: http://sourceforge.net/projects/blosxom @@ -142,6 +142,11 @@ $encode_xml_entities = 1; # can change this, too) $encode_8bit_chars = 0; +# RegExp matching all characters which should be URL encoded in links. +# Defaults to anything but numbers, letters, slash, colon, dash, +# underscore and dot. +$url_escape_re = qr([^-/a-zA-Z0-9:._]); + # -------------------------------- =head1 ENVIRONMENT @@ -237,6 +242,7 @@ use vars qw! %others $encode_xml_entities $encode_8bit_chars + $url_escape_re $content_type !; @@ -852,18 +858,20 @@ sub generate { } } + # Save unescaped versions and allow them to be used in + # flavour templates. + use vars qw/$url_unesc $path_unesc $fn_unesc/; + $url_unesc = $url; + $path_unesc = $path; + $fn_unesc = $fn; + + # Fix special characters in links inside XML content if ( $encode_xml_entities && $content_type =~ m{\bxml\b} && $content_type !~ m{\bxhtml\b} ) { # Escape special characters inside the 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; + &url_escape_url_path_and_fn(); # Escape <, >, and &, and to produce valid RSS $title = blosxom_html_escape($title); @@ -873,10 +881,9 @@ sub generate { $fn = blosxom_html_escape($fn); } + # Fix special characters in links inside XML content if ($encode_8bit_chars) { - $url =~ s([^-a-zA-Z0-9_./:])(sprintf('%%%02X', ord($&)))ge; - $path =~ s([^-a-zA-Z0-9_./:])(sprintf('%%%02X', ord($&)))ge; - $fn =~ s([^-a-zA-Z0-9_./:])(sprintf('%%%02X', ord($&)))ge; + &url_escape_url_path_and_fn(); } $story = &$interpolate($story); @@ -936,6 +943,12 @@ sub nice_date { return ( $dw, $mo, $mo_num, $da, $ti, $yr, $utc_offset ); } +sub url_escape_url_path_and_fn { + $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; +} + # Default HTML and RSS template bits __DATA__ html content_type text/html; charset=$blog_encoding