/[pub]/suikawiki/script/wiki.cgi
Suika

Contents of /suikawiki/script/wiki.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.62 - (show annotations) (download)
Wed Jun 16 23:25:26 2010 UTC (14 years, 5 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.61: +1 -0 lines
ru= parmaeter is prepsended by proxy

1 #!/usr/bin/perl
2 use strict;
3 use lib qw[/home/httpd/html/www/markup/html/whatpm
4 /home/wakaba/work/manakai2/lib
5 /home/httpd/html/swe/lib/];
6
7 use CGI::Carp qw[fatalsToBrowser];
8 require Message::CGI::Carp;
9
10 my $sw4_url = q<http://suika.fam.cx/~wakaba/wiki/sw/>;
11
12 require Message::CGI::HTTP;
13 require Encode::EUCJPSW;
14 my $cgi = Message::CGI::HTTP->new;
15
16 my $page = $ENV{QUERY_STRING};
17 $page =~ s/^ru=[^&;]+[&;]//;
18 if ($page =~ /[&;]/) {
19 $page = $cgi->get_parameter ('mypage') // '';
20
21 my $charset = $cgi->get_parameter ('_charset_') // 'euc-jp-sw';
22 $charset = 'euc-jp-sw' unless $charset eq 'utf-8';
23 $page = Encode::decode ($charset, $page);
24 } else {
25 $page = Encode::decode ('euc-jp-sw', percent_decode_byte ($page));
26 }
27
28 my $url = get_page_url ($page);
29
30 print qq[Status: 301 Moved
31 Location: $url
32 Content-Type: text/html; charset=utf-8
33
34 <!DOCTYPE HTML>
35 <html lang=en>
36 <title>301 Moved</title>
37 <h1>Moved</h1>
38 <p>See <a href="@{[htescape ($url)]}">other page</a>.];
39 exit;
40
41 sub get_page_url ($) {
42 my $wiki_name = shift;
43 $wiki_name = percent_encode ($wiki_name);
44 $wiki_name =~ s/%2F/+/g;
45 $wiki_name = $sw4_url . 'n/' . $wiki_name;
46 return $wiki_name;
47 } # get_page_url
48
49 sub percent_encode ($) {
50 my $s = Encode::encode ('utf8', $_[0]);
51 $s =~ s/([^A-Za-z0-9_~-])/sprintf '%%%02X', ord $1/ges;
52 return $s;
53 } # percent_encode
54
55 sub percent_decode ($) { # input should be a byte string.
56 my $s = shift;
57 $s =~ s/%([0-9A-Fa-f]{2})/pack 'C', hex $1/ge;
58 return Encode::decode ('utf-8', $s); # non-UTF-8 octet converted to \xHH
59 } # percent_decode
60
61 sub percent_decode_byte ($) { # input should be a byte string.
62 my $s = shift;
63 $s =~ s/%([0-9A-Fa-f]{2})/pack 'C', hex $1/ge;
64 return $s;
65 } # percent_decode_byte
66
67 sub htescape ($) {
68 my $s = shift;
69 $s =~ s/&/&amp;/g;
70 $s =~ s/</&lt;/g;
71 $s =~ s/"/&quot;/g;
72 return $s;
73 } # htescape

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24