--- awstats-6.5/wwwroot/cgi-bin/plugins/decodeutfkeys.pm 2004-08-14 16:49:09.000000000 +0200 +++ decodeutfkeys.pm 2006-08-29 19:29:42.000000000 +0200 @@ -1,4 +1,10 @@ #!/usr/bin/perl + +# 5 diciembre 2004 Daniel Clemente +# +# hack para que funcione el decodeutfkeys sin tener Encode.pm +# + #----------------------------------------------------------------------------- # decodeUTFKeys AWStats plugin # Allow AWStats to convert keywords strings coded by some search engines in @@ -9,63 +15,60 @@ # $Revision: 1.4 $ - $Author: eldy $ - $Date: 2004/08/14 14:49:09 $ -# <----- -# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES -if (!eval ('require "Encode.pm"')) { return $@?"Error: $@":"Error: Need Perl module Encode"; } +# éste ya no... +# if (!eval ('require "Encode.pm"')) { return $@?"Error: $@":"Error: Need Perl module Encode"; } +if (!eval ('require Unicode::MapUTF8')) { return $@?"Error: $@":"Error: quiero el módulo Unicode::MapUTF8"; } + if (!eval ('require "URI/Escape.pm"')) { return $@?"Error: $@":"Error: Need Perl module URI::Escape"; } -#if (!eval ('require "HTML/Entities.pm"')) { return $@?"Error: $@":"Error: Need Perl module HTML::Entities"; } -# -----> use strict;no strict "refs"; - - -#----------------------------------------------------------------------------- # PLUGIN VARIABLES -#----------------------------------------------------------------------------- -# <----- # ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN # AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE. my $PluginNeedAWStatsVersion="6.0"; my $PluginHooksFunctions="DecodeKey"; -# -----> - -# <----- # IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE. use vars qw/ /; -# -----> - - - #----------------------------------------------------------------------------- # PLUGIN FUNCTION: Init_pluginname #----------------------------------------------------------------------------- sub Init_decodeutfkeys { my $InitParams=shift; - - # <----- # ENTER HERE CODE TO DO INIT PLUGIN ACTIONS - # -----> - my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion); return ($checkversion?$checkversion:"$PluginHooksFunctions"); } - #------------------------------------------------------------------------------ # Function: Converts an UTF8 string to specified Charset # Parameters: utfstringtodecode charsettoencode # Return: newencodedstring #------------------------------------------------------------------------------ + +# DCL: unas cuantas pruebas; lo siento por decir chorradas :-) +# print DecodeKey_decodeutfkeys("Quiero que siempre se aplique. Ram\xc3\xb3n.ram%C3%B3n .cómo diseñar páginas web ","iso-8859-1") . "\n"; +# print DecodeKey_decodeutfkeys("Mezclado. hola, camión. SuperRam\xc3\xb3n.==> ram%C3%B3n .cómo diseñar páginas web ","iso-8859-1") . "\n"; +# print DecodeKey_decodeutfkeys("No aplicar. Aquí sólo hay acentos, póp.","iso-8859-1") . "\n"; + + sub DecodeKey_decodeutfkeys { my $string = shift; my $encoding = shift; if (! $encoding) { error("Function DecodeKey from plugin decodeutfkeys was called but AWStats don't know language code required to output new value."); } - $string =~ s/\\x(\w\w)/%$1/gi; # Change "\xc4\xbe\xd7\xd3\xc3\xc0" into "%c4%be%d7%d3%c3%c0" + $string =~ s/\\x(\w\w)/%$1/gi; # Change "\xc4\xbe\xd7\xd3\xc3\xc0" into "%c4%be%d7%d3%c3%c0" $string=URI::Escape::uri_unescape($string); - if ( $string =~ m/^(?:[\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf])*$/ ) - { - $string=Encode::encode($encoding, Encode::decode("utf-8", $string)); + + if ( $string =~ m/^(?:[\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf])*$/ ) { + + # Esto no funciona en Perl 5.6: +# $string=Encode::encode($encoding, Encode::decode("utf-8", $string)); + + # Esto lo he hecho yo; espero que funcione +$string = Unicode::MapUTF8::from_utf8( + {-string => $string, -charset => "iso-8859-1"}); # to_enc + + } #$string=HTML::Entities::encode_entities($string); $string =~ s/[;+]/ /g;