Thomas s: Umlaute ersetzen

Hallo,

ich habe mir folgende Funktion gestrickt:

function replaceUmlaute(curText) {
 if (typeof curText != "number" && typeof curText != "string" ) {
  alert("Sie versuchen Text auszugeben, der kein Text ist sondern: "+typeof curText);
  return "err";
 }
 if (curText == "") return "";
 if (typeof curText == "number") curText = String(curText);
 var result = curText;
 result=result.replace(/\u00fc/g, "ü");
 result=result.replace(/\u00f6/g, "ö");
 result=result.replace(/\u00e4/g, "ä");
 result=result.replace(/\u00dc/g, "Ü");
 result=result.replace(/\u00d6/g, "Ö");
 result=result.replace(/\u00c4/g, "Ä");
 result=result.replace(/\u00df/g, "ß");
 result=result.replace(/ü/g, "ü");
 result=result.replace(/ö/g, "ö");
 result=result.replace(/ä/g, "ä");
 result=result.replace(/Ü/g, "Ü");
 result=result.replace(/Ö/g, "Ö");
 result=result.replace(/Ä/g, "Ä");
 result=result.replace(/ß/g, "ß");
 return result;
}

Nachdem in der Funktion geprüft wurde, ob auch ein String vorliegt, sollen Umlaute umdefiniert werden. Das funktioniert auch alles prima NUR im Safari nicht. Benutze ich die Funktion dort, so liefert er mir für "Übertragen" nicht "Übertragen" sondern "†bertragen".

Woran liegts? Denn eigentlich dachte ich, dass die Funktion prima ist (vielleicht komliziert und langsam, aber funktionsfähig.

Unter FF und IE, alles auf MacOSX geht es. Selbst Opera hat kein Problem.

  1. Hallo Thomas,

    ich habe mir folgende Funktion gestrickt:

    Ich habe mir deine Funktion nur kurz angeschaut, und habe daher die Frage an dich:
    Wofür genau wird die Funktion denn gebraucht? Wenn du dem Dokument überall die richtige Zeichenkodierung verpasst, dürfte vieles ganz von alleine gehen.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Wofür genau wird die Funktion denn gebraucht?

      Es ist für eine Art Editor. Der Anwender tippt etwas in ein Feld zB und das getippte wird dann in einem HTML-Bereich angezeigt.

      Ich benutze die Funktionen aber auch nur intern. Ich muss mich dann nicht mehr um Umlaute kümmern ZB

      makeButton(xCoord,ycoord,"Drück mich","machwas()")

      Das "drück mich" wird dann erst bei der Konstruktion des Buttons in HTML umgesetzt.

      1. Hallo thomas,

        Es ist für eine Art Editor. Der Anwender tippt etwas in ein Feld zB und das getippte wird dann in einem HTML-Bereich angezeigt.

        Ich benutze die Funktionen aber auch nur intern. Ich muss mich dann nicht mehr um Umlaute kümmern ZB

        makeButton(xCoord,ycoord,"Drück mich","machwas()")

        Das "drück mich" wird dann erst bei der Konstruktion des Buttons in HTML umgesetzt.

        Darum geht es also?
        Dann solltest du wirklich lieber die Zeichenkodierungen richtig setzen (beispielsweise auf UTF-8). Wenn du das machst, sollte dein Dokument mit allen Sonderzeichen richtig funktionieren - ohne diese Funktion.
        "Drück mich" ist nämlich in HTML erlaubt.
        Auf meiner Webseite mache ich das genauso - bis vor mehreren Monaten hatte ich noch Entities, mittlerweile habe ich die alle durch die "normalen" Zeichen ersetzt (&raquo; und &nbsp; mal ausgenommen).

        Schau dir mal hier im Abschnitt "Deutsche Umlaute und scharfes S" den ersten Satz an. ;-)

        Grüße

        Marc Reichelt || http://www.marcreichelt.de/

        --
        Linux is like a wigwam - no windows, no gates and an Apache inside!
        Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
        1. Darum geht es also?
          Dann solltest du wirklich lieber die Zeichenkodierungen richtig setzen (beispielsweise auf UTF-8). Wenn du das machst, sollte dein Dokument mit allen Sonderzeichen richtig funktionieren - ohne diese Funktion.

          Als ob ich das nicht schon versucht hätte.

          Zum Beispiel so:

          <html><head><script type="text/javascript" src="js/include.js"></script><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"></head><body></body>

          Hat keine Auswirkung.

          <html><head><script type="text/javascript" src="js/include.js"></script><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body></body>

          Macht aus allem ein "ü"

          Ich habe dann versucht mal bei andern zu schauen, wie die das so hinbekommen haben.

          Bei www.arndt-bruenner.de sieht der Anfang genauso aus (auch kein HTML spezifiziert) und es geht. Ich verstehe es nicht :-(

          1. Hallo,

            Als ob ich das nicht schon versucht hätte.
            <html><head><script type="text/javascript" src="js/include.js"></script><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"></head><body></body>
            Hat keine Auswirkung.

            das wundert mich nicht. Höchstwahrscheinlich sendet dein Server im HTTP-Header schon eine Angabe zur Zeichencodierung. Die hat dann Vorrang, und die gleichnamige META-Angabe im Dokument ist in diesem Fall wertlos.
            Du müsstest also erstmal kontrollieren, was dein Server sendet, DANN diese Angabe korrigieren, und schließlich dein Dokument in der richtigen Codierung speichern.

            <html><head><script type="text/javascript" src="js/include.js"></script><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body></body>
            Macht aus allem ein "ü"

            Nanü?

            Ich habe dann versucht mal bei andern zu schauen, wie die das so hinbekommen haben.
            Bei www.arndt-bruenner.de sieht der Anfang genauso aus (auch kein HTML spezifiziert) und es geht. Ich verstehe es nicht :-(

            Ja, und die HTTP-Header?

            So long,
             Martin

            --
            Wenn zwei dasselbe tun, sind sie vielleicht bald zu dritt.
            1. <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"></head><body>äöüß</body></html>

              bzw.

              <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>äöüß</body></html>

              liefert bei mir im Safari nur Schrott. Warum? Die Seite von arndt-bruenner.de, die auch nicht mehr benutzt, wird richtig angezeigt (beides lokal!).

              Was läuft falsch. Der Server kanns ja nicht mehr sein und die Browsersettings sind ja auch nicht verändert. In der css kann so etwas auch nicht stehe - afaik.

              Was kann ich also tun nicht mehr immer &uuml; etc. schreiben zu müssen?

              thomas s

              1. Hallo Thomas,

                der Hinweis, dass du nur lokal testest, war natürlich wichtig. Warum hast du das nicht gleich gesagt? Dann war mein Hinweis auf die HTTP-Header natürlich nicht angebracht.

                <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"></head><body>äöüß</body></html>

                Sollte funktionieren, wenn dein Editor diese Datei *wirklich* als ISO-8859-1 speichert.

                <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>äöüß</body></html>

                Sollte funktionieren, wenn dein Editor diese Datei *wirklich* als UTF-8 speichert.

                Was läuft falsch.

                In welcher Codierung speichert denn der Editor, den du verwendest, seine Dateien? Das muss natürlich auch wieder zu der Angabe passen, die du im Dokument machst.

                In der css kann so etwas auch nicht stehe - afaik.

                Stimmt.

                Was kann ich also tun nicht mehr immer &uuml; etc. schreiben zu müssen?

                Nochmal:
                 * Dein Editor muss die Dateien z.B. in UTF-8 oder ISO-8859-1 speichern
                 * Im Dokument muss dieselbe Zeichencodierung angegeben sein
                 * Falls online: Der Server muss im HTTP-Header ebenfalls dieselbe Codierung senden

                Ciao,
                 Martin

                --
                Ja, ja... E.T. wusste schon, warum er wieder nach Hause wollte.
                1. Sollte funktionieren, wenn dein Editor diese Datei *wirklich* als ISO-8859-1 speichert.
                  Sollte funktionieren, wenn dein Editor diese Datei *wirklich* als UTF-8 speichert.

                  Vielen Dank euch Beiden. Ich wusste gar nicht, dass man das einstellen muss/kann. Ich dachte immer, wenn ich dass als reines Textdokument speichere reicht das. Erst jetzt habe ich festgestellt,dass es da mehr gibt.

                  Danke

              2. Hallo,

                <html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"></head><body>äöüß</body></html>

                bzw.

                <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>äöüß</body></html>

                liefert bei mir im Safari nur Schrott. Warum? Die Seite von arndt-bruenner.de, die auch nicht mehr benutzt, wird richtig angezeigt (beides lokal!).

                Also mal langsam. Du hast die Seite von arndt-bruenner.de von Deinem lokalen Webserver ausliefern lassen und diese wird vom Safari korrekt angezeigt? Vom selben lokalen Webserver werden beide oben angegebene Ressourceninhalte nur als "Schrott" ausgeliefert? Richtig so?

                Poste mal den "Schrott":

                charset=iso-8859-1:

                charset=utf-8:

                Was läuft falsch. Der Server kanns ja nicht mehr sein

                Wenn es der selbe Server ist, der den Inhalt von arndt-bruenner.de korrekt ausliefert, dann nicht.

                Was kann ich also tun nicht mehr immer &uuml; etc. schreiben zu müssen?

                Es könnte noch am Editor liegen, mit dem Du die Ressorceninhalte erstellst. Die beschriebenen Probleme treten auf, wenn dieser die Textinhalte weder in der ISO-8859-1 noch in der UTF-8 Kodierung speichert, sondern in einer völlig anderen.

                viele Grüße

                Axel

  2. Hallo,

    ich habe mir folgende Funktion gestrickt:

    function replaceUmlaute(curText) {
    if (typeof curText != "number" && typeof curText != "string" ) {
      alert("Sie versuchen Text auszugeben, der kein Text ist sondern: "+typeof curText);
      return "err";
    }
    if (curText == "") return "";
    if (typeof curText == "number") curText = String(curText);
    var result = curText;
    result=result.replace(/\u00fc/g, "&uuml;");
    result=result.replace(/\u00f6/g, "&ouml;");
    result=result.replace(/\u00e4/g, "&auml;");
    result=result.replace(/\u00dc/g, "&Uuml;");
    result=result.replace(/\u00d6/g, "&Ouml;");
    result=result.replace(/\u00c4/g, "&Auml;");
    result=result.replace(/\u00df/g, "&szlig;");
    result=result.replace(/ü/g, "&uuml;");
    result=result.replace(/ö/g, "&ouml;");
    result=result.replace(/ä/g, "&auml;");
    result=result.replace(/Ü/g, "&Uuml;");
    result=result.replace(/Ö/g, "&Ouml;");
    result=result.replace(/Ä/g, "&Auml;");
    result=result.replace(/ß/g, "&szlig;");
    return result;
    }

    Nachdem in der Funktion geprüft wurde, ob auch ein String vorliegt, sollen Umlaute umdefiniert werden.

    Nur warum versucht die Funktion das zweimal? Bereits nach dem Durchlauf von

    result=result.replace(/\u00fc/g, "&uuml;");
    result=result.replace(/\u00f6/g, "&ouml;");
    result=result.replace(/\u00e4/g, "&auml;");
    result=result.replace(/\u00dc/g, "&Uuml;");
    result=result.replace(/\u00d6/g, "&Ouml;");
    result=result.replace(/\u00c4/g, "&Auml;");
    result=result.replace(/\u00df/g, "&szlig;");

    sollte es eigentlich keine üöäÜÖÄß mehr geben.

    Das funktioniert auch alles prima NUR im Safari nicht. Benutze ich die Funktion dort, so liefert er mir für "Übertragen" nicht "&Uuml;bertragen" sondern "†bertragen".

    Kann man das irgendwo sehen? Das würde bedeuten, dass \u00dc durch \u2020 ersetzt wurde. Deine Funktion macht das jedenfalls nicht.

    viele Grüße

    Axel