Jean-Max: Alle guten Dinge sind dreist: Schon wieder Schei? Encoding...

Beitrag lesen

Bounjoun alle,

Die Aufgabe: aus dem Referrer-String (derzeit) sechs Suchmaschinen auswerten, den eingegebenen Suchbegriff extrahieren und die Ausbage nach Vorkommenshäufigkeit präsentieren.

Die Lösung: Perl-technisch kein großes Problem, vielleicht läßt sich das eleganter Lösen - das ist aber nicht das Problem, dieses wird danach beschrieben:

  
   my %se;  # search engines  
   my %kw;  # keywords, keyphrases  
   for (keys %ref) {  # %ref wird weiter oben im Programm mit Referrer-Strings befüllt  
     $se{Google}++ if $_ =~ /\.google\./;  
     $se{Yahoo}++ if $_ =~ /\.yahoo\./;  
     $se{bing}++ if $_ =~ /\.bing\.com/;  
     $se{'Web.de'}++ if $_ =~ /suche\.web\.de/;  
     $se{Altavista}++ if $_ =~ /\.altavista\./;  
     $se{'T-Online'}++ if $_  =~ /navigationshilfe|suche\.t-online\./;  
     if ( $_ =~ /(?<![a-z])(q=|r=|search=|query=|p=)(.+?)(&.*)*$/g ) {  
       my $query = $2;  
       $query =~ s/(%20)+/$1/g;   # durch Mehrfachleerzeichen enstandene Doubletten in der Ausgabe vermeiden  
       $query = $cgi->unescape($query); #URL-decoden  
       $kw{$query}++;  
     }  
   }  

Am Ende enthält %kw so was wie:

  'Atomic Eggs' => 4,  
  'Patrick Andrieu' => 2,  
  'Corel Draw kann keine templates öfnnen' => 1,

etc...

Die HTML-Ausgabe (UTF-8) sieht tabellarisch dann so aus:

| Anzahl | Suchwort/-begriff

1 |      4 | Atomic Eggs
2 |      2 | Patrick Andrieu
3 |      1 | Corel Draw kann keine templates öfnnen

Beispiel hier: http://www.pagecount.org/oae/counter/pv.pl?month=this&target=refs, unterste Tabelle (Daten zum Einloggen: atomic, eggs).

Das Problem: solange ich nur mit UTF-8-Encoding zu tun habe, gibt es keins. Doch, und der dritte Suchbegriff im obigen Beispiel habe ich nicht erfunden, sind immer wieder andere Daten zu finden.

Corel Draw kann keine templates öfnnen

Abgesehen davon, dass der oder die Suchende ein »f« zu wenig und dafür ein »n« zu viel im Wort »öffnen« in Google eingetippt hatte, sah der URL-Encodete »Rohbegriff« in der Logfile so aus:

Corel Draw kann keine templates %F6fnnen

Ausgegeben wird:

Corel Draw kann keine templates �fnnen

Da schauen wir uns mal den gesamten Referrer-String an:

http://www.google.de/custom?q=Corel Draw kann keine templates %F6fnnen&sa=Suchen&client=pub-4347119884249993&forid=1&channel=8272761113&ie=ISO-8859-1&oe=ISO-8859-1&cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23336699%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3AFFFFFF%3BLBGC%3A336699%3BALC%3A0000FF%3BLC%3A0000FF%3BT%3A000000%3BGFNT%3A0000FF%3BGIMP%3A0000FF%3BFORID%3A1%3B&hl=de&meta=

Aha: &ie=ISO-8859-1&oe=ISO-8859-1

Die Frage: Da ich nicht wissen kann, wie User ihre Clients konfigurieren (genausowenig, wie sie sich vertippen *g*), was habe ich noch für Möglichkeiten, dass die Ausgaben immer korrekt ist:

Corel Draw kann keine templates öfnnen

Adiou.