Sascha: Funktion zum Umwandeln von Umlauten bringt Fehler bei Zuweisung

Hi Folks,

ich habe ein Problem, wobei ich nicht verstehe wieso.
Aber zum Glück gibt es ja ne Menge schlaue Köpfe hier ;)

Ich habe eine Funktion geschrieben, die Umlaute umwandeln soll:

  
function changeUmlaute() {  
		for (i=0; i <= document.getElementById('fake').value.length; ++i) {  
			if (document.getElementById('fake').value.charAt(i) == "Ä") {  
				document.getElementById('fake').value.charAt(i) = "A";  
				document.getElementById('fake').value.charAt(i+1) = "E";  
			}  
			if (document.getElementById('fake').value.charAt(i) == "Ö") {  
				document.getElementById('fake').value.charAt(i) = "O";  
				document.getElementById('fake').value.charAt(i+1) = "E";				  
			}  
			if (document.getElementById('fake').value.charAt(i) == "Ü") {  
				document.getElementById('fake').value.charAt(i) = "U";  
				document.getElementById('fake').value.charAt(i+1) = "E";  
			}  
			if (document.getElementById('fake').value.charAt(i) == "ä") {  
				document.getElementById('fake').value.charAt(i) = "a";  
				document.getElementById('fake').value.charAt(i+1) = "e";  
			}  
			if (document.getElementById('fake').value.charAt(i) == "ö") {  
				document.getElementById('fake').value.charAt(i) = "o";  
				document.getElementById('fake').value.charAt(i+1) = "e";  
			}  
			if (document.getElementById('fake').value.charAt(i) == "ü") {  
				document.getElementById('fake').value.charAt(i) = "u";  
				document.getElementById('fake').value.charAt(i+1) = "e";  
			}  
			if (document.getElementById('fake').value.charAt(i) == "ß") {  
				document.getElementById('fake').value.charAt(i) = "s";  
				document.getElementById('fake').value.charAt(i+1) = "s";  
			}  
		  
		}  
	}  

Diese Funktion wirft allerdings einen Fehler aus.
Hier die Aussage vom Opera:

Uncaught exception: ReferenceError: Cannot assign to  'document.getElementById('fake').value.charAt(i)'
Error thrown at line 278, column 4 in changeUmlaute():
    document.getElementById('fake').value.charAt(i) = "O";
called from line 186, column 2 in checkFormular():
    changeUmlaute();
called from line 1, column 0 in <anonymous function>(event):
    checkFormular()

Ich verstehe bloß nicht, warum er den Wert nicht zuweisen kann.
Bin gespannt auf die Ursache :)

Gruß Sascha

  1. Hallo,

    Hier die Aussage vom Opera:

    Uncaught exception: ReferenceError: Cannot assign to  'document.getElementById('fake').value.charAt(i)'

    da hat er verdammt Recht, der Gute.

      		document.getElementById('fake').value.charAt(i) = "A";  
      		document.getElementById('fake').value.charAt(i+1) = "E";  
    

    Der Ausdruck document.getElementById('fake').value.charAt(i) ist kein sogenannter Linkswert oder L-Value, das heißt, er kann nicht links vom Zuweisungszeichen stehen. Denn dieser Ausdruck steht syntaktisch betrachtet nicht für einen Variablenwert im Speicher. Von der Überlegung her natürlich schon, deswegen ist das hier nicht auf Anhieb zu verstehen.

    Was du hier formuliert hast, ist syntaktisch gleichwertig mit

    Math.floor(x) = 4;

    Das heißt, du lässt einen Ausdruck berechnen, und willst dann diesem Ausdruck einen Wert zuweisen. Das geht nicht.

    Aber der Zugriff auf einzelne Zeichen eines Strings geht ja viel einfacher mit eckigen Klammern, quasi indem man den String als Array aus Zeichen anspricht.

    Und noch ein Hinweis zur Optimierung: Du bestimmst innerhalb deiner Funktion ziemlich oft denselben Ausdruck, nämlich document.getElementById('fake').value. Da wäre es günstig, den Ausdruck *einmal* zu Beginn der Funktion zu ermitteln und lokal zwischenzuspeichern.

    So long,
     Martin

    --
    Solange der Nagellack nicht trocken ist,
    ist eine Frau praktisch wehrlos.
      (Burt Reynolds, US-Schauspieler)
    1. @@Der Martin:

      nuqneH

      Und noch ein Hinweis zur Optimierung: […]

      Und noch einer:

      document.getElementById('fake').value.charAt(i) hat nur einen bestimmten Wert. Es kann also nur einer der vielen Vergleiche true ergeben. Die nachfolgenden Vergleiche müssen dann gar nicht mehr ausgeführt werden.

      if (foo == bar)  
      {;  
      }  
      else if (foo == baz)  
      {;  
      }  
      else if (foo == quz)  
      {;  
      }
      

      Aber selbst das ist wohl kein guter Coding-Stil; schließlich gibt es zu diesem Zweck http://de.selfhtml.org/javascript/sprache/bedingt.htm#switch@title=switch():

      switch(foo)  
      {  
        case bar:; break;  
        
        case baz:; break;  
        
        case quz:; break;  
      }
      

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hallo,

        Und noch ein Hinweis zur Optimierung: […]
        Und noch einer:
        Aber selbst das ist wohl kein guter Coding-Stil; schließlich gibt es zu diesem Zweck http://de.selfhtml.org/javascript/sprache/bedingt.htm#switch@title=switch():

        sehr guter Einwand, so weit hatte ich vorhin nicht mehr gedacht, ich war schon etwas in Hektik und wollte nur noch schnell ein einigermaßen sinnvolles Posting absetzen.

        Ciao,
         Martin

        --
        Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.
      2. Hi Folks,

        Aber selbst das ist wohl kein guter Coding-Stil; schließlich gibt es zu diesem Zweck http://de.selfhtml.org/javascript/sprache/bedingt.htm#switch@title=switch():

        switch(foo)

        {
          case bar:
            …; break;

        case baz:
            …; break;

        case quz:
            …; break;
        }

        
        >   
        > Qapla'  
          
        Da gebe ich dir allerdings recht, wäre einfacher und sauberer gewesen!  
          
        Hmm...danke erstma für den Hinweis.  
          
        
        > Der Ausdruck `document.getElementById('fake').value.charAt(i)`{:.language-javascript} ist kein sogenannter Linkswert oder L-Value, das heißt, er kann nicht links vom Zuweisungszeichen stehen. Denn dieser Ausdruck steht syntaktisch betrachtet nicht für einen Variablenwert im Speicher. Von der Überlegung her natürlich schon, deswegen ist das hier nicht auf Anhieb zu verstehen.  
        >   
        > So long,  
        >  Martin  
        >   
          
        Das wusste ich nicht, klingt aber logisch und wenn man drüber nachdenkt, wie hätte das auch funktionieren sollen!  
        Allerdings stell ich mir jetzt grade die Frage:  
        Wie kann man Umlaute umwandeln lassen?  
        Wie habt ihr dies bisher gemacht?  
          
        Gruß Sascha
        
        1. @@Sascha:

          nuqneH

          Wie habt ihr dies bisher gemacht?

          Nicht. Warum auch?

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
        2. Hallo,

          Allerdings stell ich mir jetzt grade die Frage:
          Wie kann man Umlaute umwandeln lassen?

          warum willst Du Umlaute umwandeln?

          Ok, in Dateinamen von Dateien, die als Ressourcen für Webauftritte dienen, möchte *ich* keine Umlaute haben. Ich sehe bei Dateinamen keinen Zusammenhang mit Javascript.

          Wie habt ihr dies bisher gemacht?

          Jürgen hat Dir einen Vorschlag gemacht, wie Du Dein Ziel erreichen kannst. Mich interessiert, warum Du Deine Daten verfälschen willst.

          Freundliche Grüße

          Vinzenz

          1. Hi Folks,

            Mich interessiert, warum Du Deine Daten verfälschen willst.

            Freundliche Grüße

            Vinzenz

            Weil ich einen durch Anwendern vorgegeben String per Mail verschicken möchte.
            Der Empfängerclient kann aber keine deutschen Sonderzeichen darstellen.

            Und deshalb wollte ich diese umwandeln, damit der Empfänger keine Hyroglyphen empfängt.

            Gruß Sascha

            1. @@Sascha:

              nuqneH

              Der Empfängerclient kann aber keine deutschen Sonderzeichen darstellen.

              Wie bitte?? Es gibt im Jahre 2010 noch Systeme, die Latin-1 Supplement (U+00A0 bis U+00FF) nicht darstellen können?

              Oder liegt da eher ein Problem mit der Zeichencodierung vor (was sich lösen ließe)?

              damit der Empfänger keine Hyroglyphen empfängt.

              Sieht so aus. In welcher Zeichencodierung werden die Mails verschickt?

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
              1. Hi Folks,

                Der Empfängerclient kann aber keine deutschen Sonderzeichen darstellen.

                Wie bitte?? Es gibt im Jahre 2010 noch Systeme, die Latin-1 Supplement (U+00A0 bis U+00FF) nicht darstellen können?

                Oder liegt da eher ein Problem mit der Zeichencodierung vor (was sich lösen ließe)?

                Ich gehe davon aus, dass es an der Zeichencodierung liegt.
                Mir ist aber nicht bewusst, wie ich da direkt Einfluss darauf nehmen kann.

                damit der Empfänger keine Hyroglyphen empfängt.

                Sieht so aus. In welcher Zeichencodierung werden die Mails verschickt?

                Qapla'

                Zur Sachlage:

                Der Anwender füllt ein Formular aus und dies wird per Mailto Funktion abgeschickt (ja, ich weiß das es keine optimale Lösung ist und genau deshalb solche Probleme wie diese entstehen. Aber es ist vom Auftraggeber nicht gewünscht und wird nicht akzeptiert, dies serverseitig zu verarbeiten!).

                Der Anwender öffnet dieses Formular im Firefox und schickt es über Outlook an eine definierte E-Mailadresse.
                Dort kommen die Umlaute aber z.B. Ö = Ã- an.

                Deshalb wollte ich eigentlich die Umlaute einfach umwandeln.
                Dann gäbe es kein Problem mit der Zeichencodierung.
                Wenn es anders geht, bin ich natürlich zu allen Schandtaten bereit :)

                Gruß Sascha

                1. @@Sascha:

                  nuqneH

                  Dort kommen die Umlaute aber z.B. Ö = Ã- an.

                  UTF-8-codierte Daten werden also ISO-8859-#-decodiert.

                  Wenn es anders geht, bin ich natürlich zu allen Schandtaten bereit :)

                  Hilft es vielleicht, die <http://de.selfhtml.org/html/formulare/definieren.htm#zeichenkodierung@title=Zeichencodierung der Formulardaten> auf "ISO-8859-1" ("ISO-8859-15") zu setzen?

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
                  1. Wenn es anders geht, bin ich natürlich zu allen Schandtaten bereit :)

                    Hilft es vielleicht, die <http://de.selfhtml.org/html/formulare/definieren.htm#zeichenkodierung@title=Zeichencodierung der Formulardaten> auf "ISO-8859-1" ("ISO-8859-15") zu setzen?

                    Qapla'

                    Es hilft leider nicht.

                    Ich habe das Gefühl, dass es am Zusammenspiel von Firefox 3.5.6 und Outlook 2007 liegt.
                    Habe nämlich gerade rausgefunden, dass es nicht passiert wenn man den IE7 nutzt.
                    Leider haben die Anwender genau diese beiden Browser zur Auswahl.

                    Gruß Sascha

                  2. Hallo,

                    Dort kommen die Umlaute aber z.B. Ö = Ã- an.
                    UTF-8-codierte Daten werden also ISO-8859-#-decodiert.

                    genau.

                    Wenn es anders geht, bin ich natürlich zu allen Schandtaten bereit :)
                    Hilft es vielleicht, die <http://de.selfhtml.org/html/formulare/definieren.htm#zeichenkodierung@title=Zeichencodierung der Formulardaten> auf "ISO-8859-1" ("ISO-8859-15") zu setzen?

                    Nur bedingt:
                    a) Formulardaten werden als ISO-dingsda an Users Mailclient übergeben, der ist auch auf ISO-Latin als Default eingestellt - passt.
                    b) Formulardaten werden als ISO-dingsda an Users Mailclient übergeben, der ist aber auf UTF-8 als Default eingestellt - passt nicht, Umlaute kommen als Fragezeichen (fehlerhafte UTF-8-Codierung).

                    Mit den anderen beiden Permutationen sieht's ähnlich aus: Eine produziert das gewünschte Ergebnis, die andere den Zeichensalat, den Sascha beschreibt.

                    Was merken wir daran wieder, lieber Sascha? Mit dem "Versand" eines Formulars über das mailto-Pseudoprotokoll holen wir uns eine weitere Unbekannte in das System, nämlich den Mailclient des Besuchers. Er könnte eventuell gar nicht existieren; und wenn doch, sind wir dessen eventuell unpassenden Einstellungen auf Gedeih und Verderb ausgeliefert.

                    Ciao,
                     Martin

                    --
                    Kopflosigkeit schützt nicht vor Migräne.
                    1. Hallo,
                      a) Formulardaten werden als ISO-dingsda an Users Mailclient übergeben, der ist auch auf ISO-Latin als Default eingestellt - passt.
                      b) Formulardaten werden als ISO-dingsda an Users Mailclient übergeben, der ist aber auf UTF-8 als Default eingestellt - passt nicht, Umlaute kommen als Fragezeichen (fehlerhafte UTF-8-Codierung).

                      Das Problem scheint eher am Browser zu liegen, dass diese es unterschiedlich übergeben.
                      Denn Outlook -> IE7 klappt-
                      Outlook -> Firefox klappt nicht.

                      Was merken wir daran wieder, lieber Sascha? Mit dem "Versand" eines Formulars über das mailto-Pseudoprotokoll holen wir uns eine weitere Unbekannte in das System, nämlich den Mailclient des Besuchers. Er könnte eventuell gar nicht existieren; und wenn doch, sind wir dessen eventuell unpassenden Einstellungen auf Gedeih und Verderb ausgeliefert.

                      Ciao,
                      Martin

                      Bin ich mit bewusst und würde das ganze auch lieber serverseitig verarbeiten lassen.
                      Allerdings habe ich hier die Möglichkeit nicht, ich kann mit dieser Option nicht arbeiten.
                      Deshalb wollte ich ja auch die Umlaute einfach umwandeln.

                      Gruß Sascha

                      1. @@Sascha:

                        nuqneH

                        Bin ich mit bewusst und würde das ganze auch lieber serverseitig verarbeiten lassen.
                        Allerdings habe ich hier die Möglichkeit nicht, ich kann mit dieser Option nicht arbeiten.

                        Warum nicht? Vielleicht wäre es an der Zeit, diese Option zu schaffen.

                        Deshalb wollte ich ja auch die Umlaute einfach umwandeln.

                        An wen gehen diese Mails?

                        Wenn ich Mails bekomme, in denen 'ae' statt 'ä' verwendet wird, stelle ich mir die Frage nach dem technischen Sachverstand des Absenders.

                        Wollt Ihr, dass Eure Mailempfänger sich ähnliche Frage stellen?

                        Qapla'

                        --
                        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                        (Mark Twain)
                        1. Hi Folks,

                          @@Sascha:

                          nuqneH

                          Bin ich mit bewusst und würde das ganze auch lieber serverseitig verarbeiten lassen.
                          Allerdings habe ich hier die Möglichkeit nicht, ich kann mit dieser Option nicht arbeiten.

                          Warum nicht? Vielleicht wäre es an der Zeit, diese Option zu schaffen.

                          Dies steht nicht in meiner Macht.
                          Ich soll dieses Formular für eine andere Abteilung schreiben.
                          Die Herrschaft über die Infrastruktur ist aber nochmal ganz wo anders und von dortaus nicht gewünscht.
                          Politische Machtspielchen, mit denen ich mich jetzt rumärgern muss, obwohl ich mit allem eigentlich rein gar nix zu tun habe :/

                          Deshalb wollte ich ja auch die Umlaute einfach umwandeln.

                          An wen gehen diese Mails?

                          Wenn ich Mails bekomme, in denen 'ae' statt 'ä' verwendet wird, stelle ich mir die Frage nach dem technischen Sachverstand des Absenders.

                          Wollt Ihr, dass Eure Mailempfänger sich ähnliche Frage stellen?

                          Qapla'

                          Die Mails gehen immer an eine bestimmte Adresse, nämlich die Abteilung für die ich das Formular gemacht habe.

                          Gruß Sascha

                          1. @@Sascha:

                            nuqneH

                            Ich soll dieses Formular für eine andere Abteilung schreiben.

                            Intranet also? Kann man davon ausgehen, dass die Mails nicht als text/plain, sondern als HTML-Mails verschickt werden?

                            In dem Fall wäre es sinnvoller, Zeichen durch Entity-Referenzen zu escapen, also 'ä' durch '&auml;'. Dann werden nur ASCII-Zeichen verarbeitet und kommt auf dem Schirm des Empfängers kommt trotzdem 'ä' an.

                            Die Herrschaft über die Infrastruktur ist aber nochmal ganz wo anders und von dortaus nicht gewünscht.

                            Die Obrigkeit hält also am BIBO-Prinzip fest?

                            Qapla'

                            PS: Zitiere bitte sinnvoll, nicht alles.

                            --
                            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                            (Mark Twain)
                            1. Hi Folks,

                              Intranet also? Kann man davon ausgehen, dass die Mails nicht als text/plain, sondern als HTML-Mails verschickt werden?

                              Genau, handelt sich nur um Intranet.
                              Hier einfach einmal mal den Kopf des Formulars:

                              <form name="form_Button" action="" enctype=text/plain method="post" accept-charset="ISO-8859-15" onsubmit="checkFormular()" onreset="checkReset()">

                              Durch die Funktion checkFormular() wird das Actionattribut geschieben.
                              Lautet dann:

                              action="abteilung@unternehmen.de?subject=OnBoarding"

                              Die Obrigkeit hält also am BIBO-Prinzip fest?

                              Ja und Bullshit ist hier das richtige Wort

                              PS: Zitiere bitte sinnvoll, nicht alles.

                              Ich werde mir Mühe geben.

                              Gruß Sascha

                              1. @@Sascha:

                                nuqneH

                                Intranet also? Kann man davon ausgehen, dass die Mails nicht als text/plain, sondern als HTML-Mails verschickt werden?

                                Genau, handelt sich nur um Intranet.

                                Ja und, sind HTML-Escapes eine Option?

                                Qapla'

                                --
                                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                                (Mark Twain)
                                1. Hi Folks,

                                  Ja und, sind HTML-Escapes eine Option?

                                  Qapla'

                                  Generell ist für mich alles eine Option, die das Problem löst.

                                  Mir ist nur nicht klar, wie ich die Zeichen dann umwandeln soll.
                                  Wäre das nicht genau das gleiche, was ich vorher mit ö wird zu oe probiert habe?

                                  Gruß Sascha

                                  1. @@Sascha:

                                    nuqneH

                                    Mir ist nur nicht klar, wie ich die Zeichen dann umwandeln soll.

                                    Genauso, wie du 'ö' in 'oe' umwandelst, kannst du es auch in '&ouml;' umwandeln.

                                    Wäre das nicht genau das gleiche, was ich vorher mit ö wird zu oe probiert habe?

                                    Insofern, dass nur noch ASCII-Zeichen vorkommen, ja. Statt 'o' und 'e' dann eben '&', 'o', 'u', 'm', 'l', ';'.

                                    Der Nutzer bekommt dann aber nicht 'oe' zu sehen, sondern 'ö'. Vorausgesetzt natürlich, die Mails werden als HTML-Mails veschickt. Ansonsten bekommt er '&ouml;' zu sehen, was zweifelsohne noch weniger vorteilhaft ist als 'oe'.

                                    Qapla'

                                    --
                                    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                                    (Mark Twain)
                                    1. Hi Folks,
                                       »» Mir ist nur nicht klar, wie ich die Zeichen dann umwandeln soll.

                                      Genauso, wie du 'ö' in 'oe' umwandelst, kannst du es auch in '&ouml;' umwandeln.

                                      Und genau das war mein Ursprungsproblem.
                                      Es hat ja nicht funktioniert.

                                      @dedlfix

                                      Das ich es mit replace() ersetzen kann, habe ich verstanden.
                                      Das Problem, welches ich bisher nicht lösen konnte ist, dass ich versucht hatte über
                                      document.getElementById('fake').value.charAt(i)
                                      den Wert zu ändern.
                                      Nun wurde mir ja erklärt, dass dies eine Berechnung ist und ich ihr nix zuweisen kann.
                                      Oder würde dies funktionieren:

                                        
                                      document.getElementById('fake').value.replace(/Ö/g, "Oe");  
                                      
                                      

                                      Gruß Sascha

                                      1. Hi!

                                        Oder würde dies funktionieren:
                                        document.getElementById('fake').value.replace(/Ö/g, "Oe");

                                        Nein, denn replace() ändert nicht das String-Objekt selbst, sondern gibt ein Ergebnis zurück, das das String-Objekt als Ausgangsmaterial hatte. Das Ergebnis musst du dann noch irgendwem zuweisen, damit es nicht verloren geht. Also so beispielsweise

                                        document.getElementById('fake').value = document.getElementById('fake').value.replace(/Ö/g, "Oe").replace(/Ä/g, "Ae");

                                        Beachte, dass man die replace()s auch hintereinanderhängen kann.

                                        Lo!

                                        1. Hi Folks,

                                          document.getElementById('fake').value = document.getElementById('fake').value.replace(/Ö/g, "Oe").replace(/Ä/g, "Ae");

                                          Beachte, dass man die replace()s auch hintereinanderhängen kann.

                                          Lo!

                                          Okay, werd ich morgen gleich mal ausprobieren.
                                          Aber schonmal danke für die Hilfe!

                                          Gruß Sascha

                                          1. Hi Folks,

                                            document.getElementById('fake').value = document.getElementById('fake').value.replace(/Ö/g, "Oe").replace(/Ä/g, "Ae");

                                            Beachte, dass man die replace()s auch hintereinanderhängen kann.

                                            Lo!

                                            Okay, werd ich morgen gleich mal ausprobieren.
                                            Aber schonmal danke für die Hilfe!

                                            Feedback:
                                            Hat super funktioniert, danke nochma.
                                            Ich verarbeite dies jetzt jedoch als text/plain und mit ue statt ü.
                                            text/html und &uuml; hat leider nicht funktioniert.
                                            Aber nicht weiter wild, konnte ja nun mein Ursprungsproblem lösen.

                                            Gruß Sascha

                                  2. Hi!

                                    Mir ist nur nicht klar, wie ich die Zeichen dann umwandeln soll.
                                    Wäre das nicht genau das gleiche, was ich vorher mit ö wird zu oe probiert habe?

                                    Die Funktion http://de.selfhtml.org/javascript/objekte/string.htm#replace@title=replace() wurde schon genannt. Du musst nicht nur einzelne Zeichen ersetzen sondern Zeichen in die Zeichenkette einfügen.

                                    Lo!

                                  3. Hi,

                                    Mir ist nur nicht klar, wie ich die Zeichen dann umwandeln soll.
                                    Wäre das nicht genau das gleiche, was ich vorher mit ö wird zu oe probiert habe?

                                    Nein, das wäre besser, denn die Verstümmelung von ü zu ue ist nicht sauber rückgängig zu machen.
                                    Denn man darf nicht alle ae/oe/ue/sz zu ä/ö/ü/ß umwandeln - "neue" wird sonst zu "neü", "lasziv" zu "laßiv", "Feuer" zu "Feür", "szenisch" zu "ßenisch" oder besonders schlimm: "Waechter" zu "Wächter"

                                    cu,
                                    Andreas

                                    --
                                    Warum nennt sich Andreas hier MudGuard?
                                    O o ostern ...
                                    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
                              2. Hi!

                                Intranet also? Kann man davon ausgehen, dass die Mails nicht als text/plain, sondern als HTML-Mails verschickt werden?

                                Kann man nicht. Oder gibt es einen Mechanismus, dem Mail-Client mitzuteilen, welchen Content-Type es verwenden soll? Gunnar, bedenke, dass es sich hier um ein mailto-Formular handelt. Schon die Parameter subject und body sind ja nicht genormt.

                                <form name="form_Button" action="" enctype=text/plain method="post" accept-charset="ISO-8859-15" onsubmit="checkFormular()" onreset="checkReset()">

                                Ich hab es mir nicht richtig gemerkt, ob es alle IE-Versionen betrifft, aber zumindest einige davon ignorieren das accept-charset-Attribut. Darauf ist also nciht unbedingt Verlass.

                                Lo!

                        2. Hi,

                          Wenn ich Mails bekomme, in denen 'ae' statt 'ä' verwendet wird, stelle ich mir die Frage nach dem technischen Sachverstand des Absenders.

                          Wenn ich Mails bekomme, in denen mein Nachname mit 'ä' statt 'ae' geschrieben ist, stelle ich mir die Frage nach dem Verstand des Absenders ;-)

                          cu,
                          Andreas

                          --
                          Warum nennt sich Andreas hier MudGuard?
                          O o ostern ...
                          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
                          1. Hallo,

                            Wenn ich Mails bekomme, in denen 'ae' statt 'ä' verwendet wird, stelle ich mir die Frage nach dem technischen Sachverstand des Absenders.
                            Wenn ich Mails bekomme, in denen mein Nachname mit 'ä' statt 'ae' geschrieben ist, stelle ich mir die Frage nach dem Verstand des Absenders ;-)

                            das will ich dir gern zugestehen - aber gerade bei Eigennamen fragt man sich, wenn sie mit ae, oe, ue geschrieben sind, ob das absichtlich/freiwillig oder aufgrund technischer Einschränkungen getan wurde.

                            So long,
                             Martin

                            --
                            F: Was sagt der große Keks zum kleinen Keks?
                            A: Du kannst dich jetzt verkrümeln.
                      2. @@Sascha:

                        nuqneH

                        Deshalb wollte ich ja auch die Umlaute einfach umwandeln.

                        Was heißt „einfach“?

                        Die Nutzer können eingeben, was sie wollen, nicht nur [ÄÖÜäöüß]. Was soll denn aus 'å' werden? Was aus 'é'? Was aus 'č'?

                        Qapla'

                        --
                        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                        (Mark Twain)
                        1. Hi Folks,

                          @@Sascha:

                          nuqneH

                          Deshalb wollte ich ja auch die Umlaute einfach umwandeln.

                          Was heißt „einfach“?

                          "einfach" war hier nur ein Füllwort.

                          Die Nutzer können eingeben, was sie wollen, nicht nur [ÄÖÜäöüß]. Was soll denn aus 'å' werden? Was aus 'é'? Was aus 'č'?

                          Qapla'

                          Das stimmt allerdings.
                          Da aber ÖÄÜöäüß häufig vorkommen, wollte ich zumindest diese abfangen, um nicht bei jedem nachfragen zu müssen.

                          Gruß Sascha

                    2. @@Der Martin:

                      nuqneH

                      a) Formulardaten werden als ISO-dingsda an Users Mailclient übergeben, der ist auch auf ISO-Latin als Default eingestellt - passt.
                      b) Formulardaten werden als ISO-dingsda an Users Mailclient übergeben, der ist aber auf UTF-8 als Default eingestellt - passt nicht, Umlaute kommen als Fragezeichen (fehlerhafte UTF-8-Codierung).
                      […]
                      Was merken wir daran wieder, lieber Sascha? Mit dem "Versand" eines Formulars über das mailto-Pseudoprotokoll holen wir uns eine weitere Unbekannte in das System, nämlich den Mailclient des Besuchers. […]

                      Und was merken wir daran wieder, lieber Der? Wenn an irgendeiner Stelle eine andere Zeichencodierung als UTF-8 verwandt wird, schafft das nur Probleme.

                      Intern kann Software ja gern UTF-16 oder UTF-32 verwenden; nach außen sollte es UTF-8 sein. Immer und überall.*

                      Qapla'

                      * Ja, für CJK mag UTF-16 besser, weil platzsparender sein.

                      --
                      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                      (Mark Twain)
        3. Hallo,

          Wie kann man Umlaute umwandeln lassen?
          Wie habt ihr dies bisher gemacht?

          gar nicht. Warum sollte man das tun? - Außer vielleicht, man wollte selbst eine Schreibweisen-tolerante Suche programmieren, die anstatt "Gedöns" auch "Gedoens" finden soll. Dann kann man darüber nachdenken, ob man innerhalb der Suchfunktion (und nur da!) Umlaute pauschal durch ihre zweibuchstabigen Äquivalente ersetzt.
          Den umgekehrten Weg sollte man sich übrigens verkneifen, wenn man nicht eine sehr gute lexikon-gestützte Wortanalyse hat, denn verunglimpfte Wörter wie Nettöinkommen, Qülle oder Maracujäis wirken irgendwie merkwürdig.

          So long,
           Martin

          --
          Der Dienstweg ist die Abkürzung vom Holzweg zur Sackgasse.
          1. @@Der Martin:

            nuqneH

            Außer vielleicht, man wollte selbst eine Schreibweisen-tolerante Suche programmieren, die anstatt "Gedöns" auch "Gedoens" finden soll.

            http://www.alistapart.com/articles/accent-folding-for-auto-complete/

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
  2. function changeUmlaute() {
    for (i=0; i <= document.getElementById('fake').value.length; ++i) {

      
    deine Schleife läuft bis length+1, ersetze mal das <= durch <.  
      
    Übrigens, kennst du schon <http://de.selfhtml.org/javascript/objekte/string.htm#replace@title=replace>?  
      
      
    Gruß, Jürgen  
    
    
  3. Hi,

      	if (document.getElementById('fake').value.charAt(i) == "Ä") {  
      		document.getElementById('fake').value.charAt(i) = "A";  
      		document.getElementById('fake').value.charAt(i+1) = "E";  
    

    Selbst wenn das mit dem Zuweisen funktionieren würde - daß dabei das Zeichen nach dem Umlaut überbügelt würde, ist Dir hoffentlich klar. Aus "Ächt jätzt" würde "AEht jaezt".
    Ein Problem könnte auch entstehen, wenn der Umlaut an letzter Stelle steht, denn dann würde mit charAt(i+1) auf etwas zugegriffen werden, was gar nicht da ist.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  4. @@Sascha:

    nuqneH

    Aber zum Glück gibt es ja ne Menge schlaue Köpfe hier ;)

    Ja, und die fragen sich gerade:

    Ich habe eine Funktion geschrieben, die Umlaute umwandeln soll:

    Wozu? Warum willst du die richtigen Zeichen durch falsche ersetzen?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)