Horst: Umlaute verschwinden

Hallo,

bitte mal schauen auf
http://rolfrost.de/cgi-bin/words.cgi?char=Q

da steht "Qualitt" wo das 'ä' fehlt. Weiter unten steht "Qualitätsweine", da ist das 'ä' dabei.

Die Liste mit diesen Worten erstelle ich auf dem Linux-Server mit einem CGI-Script und dem Modul HTML::TagPArser. Verwende ich das Script mit demselben Modul lokal auf WinXP, fehlt nicht ein einziger Umlaut.

Btw., es sind auch die anderen Umlaute, die sporadisch fehlen.

Untenstehend ein Auszug aus dem Scipt, was die Wortliste erstellt, wer mag schaue sich das mal an.

Vielen Dank schonmal,
Hotte

  
foreach my $file(@htmlfiles){  
 my $html = HTML::TagParser->new( $file );  
 my $body = $html->getElementsByTagName( "body" );  
 my $tit = $html->getElementsByTagName( "title" );  
 my $title = $tit->innerText();  
 my @words = split /\s+/, $body->innerText();  
 foreach my $word(@words){  
  # umlaute wandeln!! # ä => ä  
  $word = uml_ae($word);  
  
  $word =~ s/[^a-zA-ZäöüÄÖÜßàâéô]//g;  
  next if $word eq '';  
  
  push @{$words{$word}}, "$file=$title";  
 }  
}  
  
# Umlaute wieder umwandeln  
sub uml_ae{  
 my $s = shift;  
 $s =~ s/ß/ß/g;  
 $s =~ s/ä/ä/g;  
 $s =~ s/ö/ö/g;  
 $s =~ s/ü/ü/g;  
 $s =~ s/Ä/Ä/g;  
 $s =~ s/Ö/Ö/g;  
 $s =~ s/Ü/Ü/g;  
 $s =~ s/à/à/g;  
 $s =~ s/â/â/g;  
 $s =~ s/é/é/g;  
 $s =~ s/ô/ô/g;  
 return $s;  
}  
  

  1. Hallo,

    noch ein Hinweis, obwohl meine Kenntnisse über die serverseitige HW/SW sehr gering sind: Die DB ist MySQL, da schreibe ich schon immer Latin1-Texte mit Umlauten rein und hole die auch unzerknittert wieder da raus.

    Ich vermute, dass das Modul HTML::TagParser auf dem Remote-Server was Anderes macht, als bei mir.

    Da ist z.B. in Zeile 447 ein Funktionsaufruf, den ich auskommentiert habe. Ist die Zeile scharfgeschaltet, werden alle Zeichen (aus title, body) bei mir lokal in die DB als utf8 geschrieben. Remote jedoch, macht es das Modul immer (title => utf8, body => Umlaute fehlen, kein utf8), egal ob die Zeile raus ist oder nicht.

    Viele Grüße,
    Hotte

  2. Hallo,

    das Problem trat auf mit HTML-Dateien, in denen ä ä usw., also umschriebene Umlaute und nichtkodierte Umlaute notiert waren. Ich habe jetzt alle Dateien so umgeschrieben, dass grundsätzlich ä usw. drinsteht. Warum der TagParser da spinnt, keine Ahnung. Hauptsache es tut so, wie ich will.

    Viele Grüße,
    Horst Haselhun

    --
    Meine IP-Adresse ist: 192.168.0.12/28
  3. Hallo Horst,

    Darf ich fragen, wieso du überhaupt so merkwürdige Ersetzungen machst? Liefere dein Dokument einfach in der richtigen Zeichenkoierugn aus, bzw. kodiere deine Quelldaten um, dann sollte das alles kein problem sein.

    Jonathan

    1. Hallo,

      Darf ich fragen, wieso du überhaupt so merkwürdige Ersetzungen machst? Liefere dein Dokument einfach in der richtigen Zeichenkoierugn aus, bzw. kodiere deine Quelldaten um, dann sollte das alles kein problem sein.

      Jow. Schau mal. Wie definiere ich ein "Wort"?
      Eine Zeichenfolge mit den erlaubten Zeichen a-zA-ZäöüÄÖÜßàâéô zum Beispiel, behaupte ich mal.

      Daher prüft mein Script auf _Zeichen_, nicht etwa auf â oder ä (das wäre viel zu kompliziert).
      Deswegen gehts schonmal ein bischen hin und her mit dem Zeichensalat ;-)

      Grundsätzlich hab ich alle meine HTML-Doks mittlerweile umgeschrieben, dass alle 'krummen' Zeichen (ä, ô ...) mit ä, ô umschrieben sind (einheitlich). Bis auf eine Ausnahme: mein Stichwortverzeichnis. Aber das schreibe ich auch noch um...

      Viele Grüße,
      Horst Haselhun

      --
      Diese Nachricht stammt vom Rechner mit der IP 192.168.12.13
      1. Hallo Horst,

        Grundsätzlich hab ich alle meine HTML-Doks mittlerweile umgeschrieben, dass alle 'krummen' Zeichen (ä, ô ...) mit ä, ô umschrieben sind (einheitlich).

        Warum? Ich verstehe immer noch nicht, was du vorhast. Speichere ein ä einfach als ein ä, dann kannst du auch problemlos Filter wie "a-zA-ZäöüÄÖÜßàâéô" verwenden.

        Jonathan

        1. Hallo,

          Grundsätzlich hab ich alle meine HTML-Doks mittlerweile umgeschrieben, dass alle 'krummen' Zeichen (ä, ô ...) mit ä, ô umschrieben sind (einheitlich).

          Warum? Ich verstehe immer noch nicht, was du vorhast.

          Was ich vorhatte, ist umgesetzt ;-)

          In diesem Thread habe ich beschrieben, dass das Perl-Modul HTML::TagParser Probleme damit hat, wenn bspw. ein â oder ä in einer HTML-Datei notiert wurde.

          Speichere ein ä einfach als ein ä, dann kannst du auch problemlos Filter wie "a-zA-ZäöüÄÖÜßàâéô" verwenden.

          Ne, eben nicht so machen. In diesem Thread habe ich geschrieben, dass ein â besser als â notiert werden sollte, fass die Datei später mit dem HTML::TagParser geparst werden soll (Und ein ä als ä usw.).

          Verstehst Du nun?

          Viele Grüße,
          Hotte

          1. Hallo Horst,

            Speichere ein ä einfach als ein ä, dann kannst du auch problemlos Filter wie "a-zA-ZäöüÄÖÜßàâéô" verwenden.

            Ne, eben nicht so machen. In diesem Thread habe ich geschrieben, dass ein â besser als â notiert werden sollte, fass die Datei später mit dem HTML::TagParser geparst werden soll (Und ein ä als ä usw.).

            Verstehst Du nun?

            Nein. ich kenne mich zwar nicht mit dem TagParser aus, aber ich sehe keinen Grund, warum der oder irgendein anderer Programmcode die Umlaute so umständlich kodiert haben müsste. Es gibt da m.M.n. keinen triftigen Grund, weil was ist an einem ä anders, als an einem a, dass es kodiert werden müsste? Sofern deine Programmierumgebung intern Unicode verwendet (und davon gehe ich aus, alles andere wäre ziemlich schwachsinnig), oder wengistens eine Zeichenkodierung in der alle benötigten Zeichen drin sind, halte ich das für höchst überflüssig.

            Jonathan