#!/usr/bin/perl #use CGI::Carp "fatalsToBrowser"; # Nutzungsbedingungen (Gästebuchserver): # Lizenz: # Stand: 7.09.2001 # # Durch den Kauf und Einsatz der Software erklären Sie sich mit diesen Lizenzabkommen einverstanden. # # Diese Lizenz erlaubt es Ihnen, Gästebuchserver auf einer oder mehrere Webseiten zu benutzen. # Für jede installierte Instanz dieses Programms benötigen Sie jeweils nur eine gesamte Lizenz. # Jedoch muss die Webseite, auf dem das Script angeboten wird auf ihrem Namen sein. # # Als legitimierter Benutzer von Gästebuchserver können Sie auf eigenes Risiko die Software verändern # und/oder auf Ihre Bedürfnisse anpassen. Sie können Dritte mit der Anpassung/Veränderung beauftragen. # # Die Original-Software oder die angepasste/veränderte Software und Teile derer dürfen nicht weitergegeben oder # verkauft oder wiederverkauft werden. # # Alle Copyright- und Versions-Hinweise, die im Gästebuchserver oder deren HTML-Seiten verwendet, # erstellt und/oder gezeigt werden, dürfen nicht entfernt werden. Diese müssen für Benutzer sichtbar sein # und in ungeänderter Form dargestellt werden. Diese Klausel gilt nicht für das Copyright im unteren Bereich # in jeder Seite ,ansonsten gilt diese Klausel für alle Copyright- und Versions-Hinweise! # # Dieses Lizenzabkommen beruht auf der aktuellen internationalen Gesetzeslage. # # Bei einem Verstoß gegen diesen Lizenzvertrag kann durch die Firma Coder-World oder deren Beauftragten die # erworbene Lizenz jederzeit zurückgezogen und für nichtig erklärt werden, es werden keinerlei geleisteten # Zahlungen für erworbene Lizenzen erstattet. # # Gästebuchserver und die dazugehörenden Dateien werden ohne Funktionsgarantie für die im Umfeld # verwendete Hardware oder Software verkauft. # # Coder-World oder deren Beauftragten sind in keiner Form für Inhalte oder Verfasser verantwortlich, die # durch diese Software erstellt wurden. # # Das Risiko der Benutzung von Gästebuchserver obliegt dem Lizenznehmer, jegliche Erstattungen im # Rechtsfall erstrecken sich maximal auf den Kaufpreis der Lizenz. # Eine Lizenz ist zeitlich unbegrenzt nutzbar, im Preis ist grundsätzlich der Zugriff auf alle neuen Versionen # für den Zeitraum von mindestens 365 Tagen ab Zahlungseingang enthalten. # # Hinweis: Es existieren keine Reseller-, Wiederverkaufs- oder Schüler-/Studenten - Versionen. Nach den # Lizenzbedingungen muß der Website-Besitzer die Lizenz selbst kaufen. # # Autor: Stefan Gipper (Stefanos) # Webseite: http://www.coder-world.de # E-Mail: support@coder-world.de # read(STDIN, $input, $ENV{'CONTENT_LENGTH'});@pairs = split(/&/, $input);foreach $pair (@pairs) {($name, $value) = split(/=/, $pair);$name =~ tr/+/ /;$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$value =~ tr/+/ /;$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$FORM{$name} = $value;}@vars = split(/&/, $ENV{QUERY_STRING});foreach $var (@vars) {($v,$i) = split(/=/, $var);$v =~ tr/+/ /;$v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$i =~ tr/+/ /;$i =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;$i =~ s///g;$INFO{$v} = $i;}$action = $INFO{'action'} || $FORM{'action'};$id = $INFO{'id'} || $FORM{'id'}; require "data/set.cgi"; $version = "1.64"; $id = "standard" if($id eq "" or $action =~ /multi|register|count/ && $action ne "multiadmin4" && $action ne "multiadmin5"); foreach ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail","/usr/bin/sendmail.restart","/etc/sendmail.cf","/etc/sendmail.cw","/usr/man/man8/sendmail.8","/var/qmail/bin/qmail-inject"){ if(-e $_ && -X _){ $mailprog = $_; last; } } if(-d("data/$id")){ require "data/$id/grafik.dat"; require "data/error.dat"; $width = $INFO{'breit'} if($INFO{'breit'}); $cgi = "$gburl/gb.cgi\?id=$id"; if($action =~ /count/) {&$action;} elsif($action =~ /add/) {require "add.cgi"; &$action;} elsif($action =~ /edit/) {require "edit.cgi"; &$action;} elsif($action =~ /replay/) {require "replay.cgi"; &$action;} elsif($action eq "help") {require "hilfe.cgi"; &hilfe;} elsif($action eq "hilfe2") {require "hilfe.cgi"; &hilfe2;} elsif($action =~ /legende/) {require "hilfe.cgi"; &hilfe2;} elsif($action =~ /aktiv/) {require "aktiv.cgi"; &$action;} elsif($action =~ /delete/) {require "delete.cgi"; &$action;} elsif($action =~ /ip/) {require "ip.cgi"; &$action;} elsif($action =~ /register/) {require "register.cgi"; &$action;} elsif($action eq "multiupdatetemp") {require "multiadmin.cgi"; &$action;} elsif($action =~ /multiadmin/) {require "multiadmin.cgi"; &$action;} elsif($action =~ /admin/) {require "admin.cgi"; &$action;} }else{ $id = "standard"; require "data/$id/grafik.dat"; require "data/error.dat"; &error("Dieser Account existiert nicht."); } &index; sub index { if(-e("data/$id/gb.html")){ open(F,"/,join("", ),3); flock(F,8) if($use_flock); close(F); open(F, "; flock(F,8) if($use_flock); close(F); $zahl = $#entry+1; $maxdisplay = 8 unless($maxdisplay); $nv = 1; $start = $INFO{'start'} || 0; $start = $start > $zahl ? $zahl : $start; $start = (sprintf("%.0f",$start / $maxdisplay)) * $maxdisplay; if($start >= (4 * $maxdisplay)){ $startp = $start - (4 * $maxdisplay); $nv = (sprintf("%.0f",$startp / $maxdisplay)) + 1; } if($zahl >= $start + (5 * $maxdisplay)){ $end = $start + (5 * $maxdisplay); }else{ $end = $zahl; } if($startp > 0){ $pages = qq~1 ... ~; } if($startp == $maxdisplay){ $pages = qq~1 ~; } for($ns = $startp; $ns < $end; $ns += $maxdisplay){ $pages .= $start == $ns ? qq~$nv ~ : qq~$nv ~; $nv++; } if($end < ($zahl - $maxdisplay)){ $lastpn = int(($zahl / $maxdisplay) + 0.9); $lastptn = int($lastpn - 0.9) * $maxdisplay; $page = qq~ ... ~; $page .= qq~ $lastpn~; } $pages .= $page; if($nv == 1 or $nv == 2){ $pages =" <<  1  >>"; }else{ $x=($start/$maxdisplay)+1; $xs=$start+$maxdisplay; $xs2=$start-$maxdisplay; if($x<($nv-1)){ if($x>1){ $pages=qq~<<  $pages~; }else{ $pages=" $pages"; } $pages .=qq~ >> ~; }else{ if($x>1){ $pages=qq~<<  $pages~; }else{ $pages=" $pages"; } $pages .="  "; } } $pages =~ s/  / /g; $zahl -= $start; my($gb1,$gb2,$gb3,$gb5,$gb8,$gb10,$gb11,$gb13,$gb14,$gb15,$gb16); for($i=$start;$i<@entry;$i++){ $entry[$i] =~ s/[\n\r]//g; $nnum++; ($gb1, $gb2, $gb3, $gb4, $gb5, $message, $gb7, $gb8, $nix, $nix2, $gb10, $gb11, $gb12, $gb13, $gb14, $gb15, $gb16) = split(/\|/,$entry[$i]); if($second eq $Tablebg6){$second=$Tablebg5;}else{$second=$Tablebg6;} if($gb13 eq 0 or !defined($gb13)){ $gb12 = "icon1" unless($gb12); &stgcode; open(C, "){ $censor =~ s/[\n\r]//g;; my($word, $censored) = split(/\=/,$censor); $message =~ s/$word/$censored/ig; } flock(C,8) if($use_flock); close(C); open(C, "){ $censor =~ s/[\n\r]//g;; my($word, $censored) = split(/\=/,$censor); $message =~ s/$word/$censored/ig; } flock(C,8) if($use_flock); close(C); my $plus = $split2; if($gb2){ $plus =~ s//$1/g; $plus =~ s/<_gb2>/$gb2/g; }else{ $plus =~ s///g; } if($gb3){ $plus =~ s//$1/g; $plus =~ s/<_gb3>/$gb3/g; $plus =~ s/<_gb4>/$gb4/g; }else{ $plus =~ s///g; } if($gb5){ $plus =~ s//$1/g; $plus =~ s/<_gb5>/$gb5/g; }else{ $plus =~ s///g; } if($gb10){ $plus =~ s//$1/g; $plus =~ s/<_gb10>/$gb10/g; }else{ $plus =~ s///g; } if($gb11){ $plus =~ s//$1/g; $plus =~ s/<_gb11>/$gb11/g; }else{ $plus =~ s///g; } if($gb8){ $plus =~ s//$1/g; $plus =~ s/<_gb8>/$gb8/g; }else{ $plus =~ s///g; } if($gb14){ $plus =~ s//$1/g; $plus =~ s/<_gb14>/$gb14/g; }else{ $plus =~ s///g; } if($gb15){ $plus =~ s//$1/g; $plus =~ s/<_gb15>/$gb15/g; }else{ $plus =~ s///g; } if($gb16){ $plus =~ s//$1/g; $plus =~ s/<_gb16>/$gb16/g; }else{ $plus =~ s///g; } $plus =~ s/<_second>/$second/g; $plus =~ s/<_icons>/$gb12/g; $plus =~ s/<_pages>/$pages/g; $plus =~ s/<_x5>/$i/g; $plus =~ s/<_zahl>/$zahl/eg; $zahl--; $plus =~ s/<_gb1>/$gb1/g; ($tag,$zeit) = ($gb7 =~ /erstellt am (\S+?) um (\S+?) Uhr/); $plus =~ s/<_tag>/$tag/g; $plus =~ s/<_zeit>/$zeit/g; $plus =~ s/<_gb7>/$gb7/g; $plus =~ s/<_message>/$message/g; $rest .= $plus; } if($nnum >= $maxdisplay){last;} } open(C,")[0],6); flock(C,8) if($use_flock); close(C); if($ENV{'HTTP_X_FORWARDED_FOR'}){ $ip = $ENV{'HTTP_X_FORWARDED_FOR'}; }else{ $ip = $ENV{'REMOTE_ADDR'}; } if($ip ne $count[1] && $ip ne $count[2] && $ip ne $count[3] && $ip ne $count[4] && $ip ne $count[5]){ $counter = $count[0] + 1; open(C, ">data/$id/counter.dat"); flock(C,2) if($use_flock); print C "$counter\|$ip\|$count[1]\|$count[2]\|$count[3]\|$count[4]\|"; flock(C,8) if($use_flock); close(C); }else{ $counter = $count[0]; } if ($INFO{'other'} eq "yes"){ $target =qq~target="_blank"~; } if ($INFO{'back'} eq "yes"){ $back =qq~&back=yes~; } $surl = $txt{'41'} unless($surl); if($html == 1){$on = $txt{'39'};}else{$on = $txt{'40'};} if($stgcode == 1){$off = $txt{'39'};}else{$off = $txt{'40'};} $split .= $rest . $split3; if($split =~ /<_icons>/){ opendir(I, "$imagesdir2/msg"); @icons = grep(/icon\d/, (sort { lc($a) cmp lc($b) } (readdir(I)))); closedir(I); $Count=0; $CheckThis = ""; foreach my $item (@icons){ my($inumber,$junk) = split(/\./,$item,2); $Count++; if($Count == 1 && $CheckThis eq ""){ $CheckThis = "CHECKED"; }else{ $CheckThis = " "; } $Icons .= qq~      ~; if($Count == 7){ $Icons .= "
"; $Count = 0; } } } if($split =~ /<_supersmilie>/){ open(L,"){ $_ =~ s/[\n\r]//g; ($smiley,$smileyfile,$alt) = split(/\|/,$_); $smiley =~ s/([\W_])/\\$1/sg; if($smileyfile !~ /^http\:\/\// && $smileyfile ne $last){ $supersmilie .= qq~$alt~; $umbruch++; }elsif($smileyfile ne $last){ $supersmilie .= qq~$alt~; $umbruch++; } $last = $smileyfile; if(($umbruch - ($yek*6)) == 6){ $supersmilie .= "
"; last if($yek == 7); $yek++; } } flock(L,8) if($use_flock); close(L); } $split =~ s/<_supersmilie>/$supersmilie/g; $split =~ s/<_html>/$on/g; $split =~ s/<_sgbc>/$off/g; $split =~ s/<_icons>/$Icons/g; $split =~ s/<_vorschau>//g; $split =~ s/<_message>//g; $split =~ s/<_mailreg>//g; $split =~ s/<_stggb>/$#entry+1/eg; $split =~ s/<_pages>/$pages/g; $split =~ s/<_ausgabe>/$ausgabe/g; $split =~ s/<_count>/$counter/g; $split =~ s/<_target>/$target/g; $split =~ s/<_back>/$back/g; $split =~ s/<_breit>/$width/g; $split =~ s/<_sname>//g; $split =~ s/<_semail>//g; $split =~ s/<_saim>//g; $split =~ s/<_sicq>//g; $split =~ s/<_sodigo>//g; $split =~ s/<_surl>//g; $split =~ s/<_shpname>//g; $split =~ s/<_syim>//g; $split =~ s/<_smsn>//g; $split =~ s/<_swohnort>//g; $split =~ s/<_strillian>//g; &ausgabe($split); } sub ausgabe { local($mitte) = @_; open(F,"); flock(F,8) if($use_flock); close(F); while($werbungx =~ s{href="(.+?)"}{ my $url = $1; $url =~ s/\?/\.\.\.\.\./g; $url =~ s/\&/\.\.\.\.\.\./g; $url =~ s/\=/\.\.\.\.\.\.\./g; $url = qq~href=gb.cgi?action=count&url=$url~; }exisog){} if($INFO{'noheader'} ne "yes"){ if(-e("data/$id/header.html")){ open(S,"); flock(S,8) if($use_flock); close(S); } open(F,"); flock(F,8) if($use_flock); close(F); while ($werbungx2 =~ s{href="(.+?)"}{ my $url = $1;$url =~ s/\?/\.\.\.\.\./g; $url =~ s/\&/\.\.\.\.\.\./g; $url =~ s/\=/\.\.\.\.\.\.\./g; $url = qq~href=gb.cgi?action=count&url=$url~; }exisog){} open(S,"){ $i =~ s/[\n\r]//g; if(lc($id) eq lc($i)){ $werbungx = 0; $werbungx2 = 0; last; } } flock(S,8) if($use_flock); close(S); $hfausgabe .= $werbungx if($werbungx); $hfausgabe .= $mitte; if(-e("data/$id/footer.html")){ open(S,"); flock(S,8) if($use_flock); close(S); $hfausgabe .= $werbungx2 if($werbungx2); $hfausgabe =~ s/<_(imagesdir|grafik)>/$imagesdir/g; if($aktiv){ $hfausgabe =~ s//$1/g; }else{ $hfausgabe =~ s///g; } $hfausgabe =~ s/<_cgi>/$cgi/g; $hfausgabe =~ s/<_id>/$id/g; BEGIN { eval { $died_in_eval = 1; require Compress::Zlib; }; if ($@) { $zlib = 0; }else{ $zlib = 1; import Compress::Zlib; } } if($ENV{'HTTP_ACCEPT_ENCODING'} =~ /x-gzip/ && $gzip == 1 && $INFO{'noheader'} ne "yes" && $ENV{'SERVER_PROTOCOL'} eq "HTTP/1.1"){ print "Content-Encoding: x-gzip\n"; print "Content-Type: text/html\n\n"; if($zlib){ binmode STDOUT; my $out = gzopen(\*STDOUT, "wb"); $out->gzwrite($hfausgabe); print $out; $out->gzclose; }else{ open(G, "|gzip -a -c|"); print G $hfausgabe; select(STDOUT); print ; close(G); } }elsif($ENV{'HTTP_ACCEPT_ENCODING'} =~ /gzip/ && $gzip == 1 && $INFO{'noheader'} ne "yes" && $ENV{'SERVER_PROTOCOL'} eq "HTTP/1.1"){ print "Content-Encoding: gzip\n"; print "Content-Type: text/html\n\n"; if($zlib){ binmode STDOUT; my $out = gzopen(\*STDOUT, "wb"); $out->gzwrite($hfausgabe); print $out; $out->gzclose; }else{ open(G, "|gzip -a -c|"); print G $hfausgabe; select(STDOUT); print ; close(G); } }else{ print "Content-Type: text/html\n\n"; print $hfausgabe; } exit(0); } sub count { $INFO{'url'} =~ s/\.\.\.\.\.\.\./\=/g; $INFO{'url'} =~ s/\.\.\.\.\.\./\&/g; $INFO{'url'} =~ s/\.\.\.\.\./\?/g; print "Content-Type: text/html\n\n"; print qq~Weiterleitung...$INFO{'url'}~; exit(0); } sub error { local($e) = @_; if(-e("data/$id/error.html")){ open(T,"); flock(T,8) if($use_flock); close(T); $i =~ s/<_e>/$e/g; &ausgabe($i); } sub mydate { if($TimeZoneOffset ne 0 && $TimeZoneOffset =~ /^\-/i){ $TimeZoneOffset =~ s/[^0-9]//g; $Times = time() - ($TimeZoneOffset * 3600); }elsif($TimeZoneOffset ne "0" && $TimeZoneOffset =~ /^\+/i){ $TimeZoneOffset =~ s/[^0-9]//g; $Times = time() + ($TimeZoneOffset * 3600); }elsif($TimeZoneOffset ne "0") { $TimeZoneOffset =~ s/[^0-9]//g; $Times = time() + ($TimeZoneOffset * 3600); }else{ $Times = time(); } ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($Times); $mon_num = $mon+1; $hour = "0$hour" if($hour < 10); $min = "0$min" if($min < 10); $sec = "0$sec" if($sec < 10); $year += 1900; $mon_num = "0$mon_num" if($mon_num < 10); $mday = "0$mday" if($mday < 10); $thishour = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0) [(localtime)[2]]; $thismonth = (Januar,Februar,Maerz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember)[(localtime)[4]]; $thisday = (Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag)[(localtime)[6]]; $date3 = "Heute ist $thisday,
der $mday-$thismonth-$year, $hour:$min"; $date = "$mday.$mon_num.$year , $hour:$min"; $day = "$mday.$mon_num.$year"; $time = "$hour:$min"; } sub checkdomain { if($offline){ local($check_referer) = 0; if($ENV{'HTTP_REFERER'}){ open(F,"){ $referer =~ s/[\n\r]//g; if($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i){ $check_referer = 1; last; } } flock(F,8) if($use_flock); close(F); }else{ $check_referer = 0; } if ($check_referer != 1){&error("$txt{'37'}");} } } sub gbcode { local($code) = $_[0]; $code =~ s/>/>/g; $code =~ s/</
code:
$code
~); } sub stgcode { if($stgcode == 1){ $message =~ s/\"/"/g; $message =~ s/(
\[|\[)code(\]
|\])(.+?)(
\[|\[)\/code(\]
|\])/\[code\]$3\[\/code\]/isg; $message =~ s/
/\[br\]/ig; $message =~ s//>/g; $message =~ s~\[code\](.+?)\[/code\]~&gbcode($1)~eisg; $message =~ s/\n/\[br\]/g; $message =~ s/\[br2\]/\n/g; if($message =~ /^\#nosmileys/){ $message =~ s/^\#nosmileys//; }else{ if(-e("data/$id/smilies.dat")){ open(L,"; flock(L,8) if($use_flock); close(L); foreach my $smileyname (@smiley){ $smileyname =~ s/[\n\r]//g; ($smiley, $smileyfile, $alt) = split(/\|/, $smileyname); $smiley =~ s/([\W_])/\\$1/sg; if($smileyfile !~ /^http\:\/\//){ $message =~ s~$smiley~$alt~g; }else{ $message =~ s~$smiley~$alt~g; } } } } $message =~ s/\[[Bb][Rr]\]/
/g; $message =~ s/\[[Bb]\]//g; $message =~ s/\[\/[Bb]\]/<\/b>/g; $message =~ s/\[[Ss]\]//g; $message =~ s/\[\/[Ss]\]/<\/s>/g; $message =~ s/\[[Ii]\]//g; $message =~ s/\[\/[Ii]\]/<\/i>/g; $message =~ s/\[[Ii]\]//g; $message =~ s/\[\/[Ii]\]/<\/i>/g; $message =~ s/\[[Uu]\]//g; $message =~ s/\[\/[Uu]\]/<\/u>/g; $message =~ s/\|/\&\#124\;/g; $message =~ s/\[hr\]/
/isg; if ($img == 1){ if($pc != 1){ $message =~ s/\[url(\]
|\])((http:\/\/|ftp:\/\/|irc:\/\/|news:\/\/|gopher:\/\/|https:\/\/).+?)(
\[|\[)img(\]
|\])((http:\/\/|https:\/\/).[^\s<>]+)(
\[|\[)\/img\]\[\/url\]/\[url=$2\]\[img\]$5\[\/img\]\[\/url\]/isg; } $message =~ s/\[img (height=[0-9]{1,3} width=[0-9]{1,3}|width=[0-9]{1,3} height=[0-9]{1,3})(\]
|\])((http:\/\/|https:\/\/).[^\s<>]+)(
\[|\[)\/img\]//isg; $message =~ s/\[img(\]
|\])((http:\/\/|gopher:\/\/|https:\/\/).[^\s<>]+)(
\[|\[)\/img\]//isg; } $message =~ s/(^|\(|\,|\(\"|\.|<|&qt;|\[|\{|^>|^<|^ |^;|;|\>\"| |>|<)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(\)|\<|\>|\.\<|\.\>|\.\s|\.\)|<|&qt;|\}|\]| |\"\)|\.\"|\"\<|\)|\,|$)/$1$2<\/a>$3/isg; $message =~ s/(^|\(|\,|\(\"|\.|<|&qt;|\[|\{|^>|^<|^ |^;|;|\>\"| |>|<)(www\..+?)(\)|\<|\>|\.\<|\.\>|\.\s|\.\)|<|&qt;|\}|\]| |\"\)|\.\"|\"\<|\)|\,|$)/$1$2<\/a>$3/isg; $message =~ s/(^|\(|\,|\(\"|\.|<|&qt;|\[|\{|^>|^<|^;|;|\>\"|^ | |>|<)((http:\/\/|ftp:\/\/|irc:\/\/|news:\/\/|gopher:\/\/|https:\/\/).+?)(\)|\.\<|\"\)|\.\"|\"\<|\.\>|<|&qt;|\}|\]|\<|\>|\.\s|\.\)| |\)|\,|$)/$1$2<\/a>$4/isg; if($pc != 1){ $message =~ s/\[url\]www.(\S+?)\[\/url\]/www.$1<\/a>/isg; $message =~ s/\[url=www.(\S+?)\](.+?)\[\/url\]/$2<\/a>/isg; $message =~ s/\[url=((http:\/\/|ftp:\/\/|irc:\/\/|news:\/\/|gopher:\/\/|https:\/\/).+?)\](.+?)\[\/url\]/$3<\/a>/isg; $message =~ s/\[url\](http:\/\/|ftp:\/\/|irc:\/\/|news:\/\/|gopher:\/\/|https:\/\/)(.+?)\[\/url\]/$1$2<\/a>/isg; $message =~ s/\[ftp(\]ftp:\/\/|\])(.+?)\[\/ftp\]/ftp:\/\/$1<\/a>/isg; } $message =~ s/\[color=(.+?)\](.+?)\[\/color\]/$2<\/font>/isg; $message =~ s/(
\[|\[)quote(\]
|\])(.+?)(
\[|\[)\/quote(\]
|\])/
quote:<\/font>
$3<\/font><\/i>
<\/blockquote>/isg; $message =~ s/\[fixed\]//ig; $message =~ s/\[\/fixed\]/<\/font>/ig; $message =~ s/\[[Ss][Uu][Pp]\]//g; $message =~ s/\[\/[Ss][Uu][Pp]\]/<\/sup>/g; $message =~ s/\[[Ss][Uu][Bb]\]//g; $message =~ s/\[\/[Ss][Uu][Bb]\]/<\/sub>/g; $message =~ s/\[center\]/
/ig; $message =~ s/\[\/center\]/<\/center>/ig; $message =~ s/\[list=(\S+?)\]/
    /isg; $message =~ s/\[list\]/