Pete: escape: Wo ist der Unterschied?

Hallo,

alert(unescape(escape('üöäpßßpöoijmklöööpoiklk \n ')));
 alert(unescape(escape(document.f.inputarea.value)));

Ich habe in einem Dokument eine Textarea und lasse auf onClick die beiden Zeilen ausführen, wobei in der Textarea der gleiche String steht.

Dennoch bekomme ich zwei verschiedenen Ergebnisse.

Kann mir das jemand erklären? Ist es nicht egal von wo der String kommt?

Pete

  1. Hi,

    alert(unescape(escape('üöäpßßpöoijmklöööpoiklk \n ')));
    alert(unescape(escape(document.f.inputarea.value)));
    Ich habe in einem Dokument eine Textarea und lasse auf onClick die beiden Zeilen ausführen, wobei in der Textarea der gleiche String steht.
    Dennoch bekomme ich zwei verschiedenen Ergebnisse.

    Wie wärs, wenn Du uns die Ergebnisse auch noch zeigst?
    (Tipp: laß sie statt als alert in eine Textarea ausgeben, dann kannst Du sie kopieren)

    Kann mir das jemand erklären? Ist es nicht egal von wo der String kommt?

    Ich vermute, daß die Strings nicht identisch sind. Aber da Du uns das Ergebnis verschweigst, ist das nur geraten.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Wie wärs, wenn Du uns die Ergebnisse auch noch zeigst?
      (Tipp: laß sie statt als alert in eine Textarea ausgeben, dann kannst Du sie kopieren)

      Im ersten Fall

      ŸšŠp§§pšoijmklšššpoiklk

      und im zweiten Fall die korrekte Anzeige.

      Ich vermute, daß die Strings nicht identisch sind. Aber da Du uns das Ergebnis verschweigst, ist das nur geraten.

      Was noch komisch ist. Ich bin gerade an einem XP -Rechner. Wenn ich jetzt die thml-Aufmache, steht da statt

      üöäpßßpöoijmklöööpoiklk \n

      genau das gleiche Kauderwelsch, also

      ŸšŠp§§pšoijmklšššpoiklk \n

      Was soll dass denn jetzt?

      Pete

      1. Hi,

        Was noch komisch ist. Ich bin gerade an einem XP -Rechner. Wenn ich jetzt die thml-Aufmache, steht da statt
        üöäpßßpöoijmklöööpoiklk \n
        genau das gleiche Kauderwelsch, also
        ŸšŠp§§pšoijmklšššpoiklk \n

        Welche encoding-Angabe(n) gelten für die Seite?

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Welche encoding-Angabe(n) gelten für die Seite?

          Der Kopf der HTML-Seite sieht so aus:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <title>Fenstertitel</title>
          <link type="text/css" href="../css/configstyle.css" rel="stylesheet">
          <script type="text/javascript" src="../js/config.js"></script>
          <script type="text/javascript">
          var pageFunction = "";
          var numOfItems = 4;
          var fileType="XML";
          </script>
          </head>

          und ist in einem Frameset mit der "frame"-Datei

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
          <html>
          <head>
          <title>OLELE : Der Online-eLearning-Editor</title>
          <meta http-equiv="content-type" content="text/html; charset=UTF-8">
          <meta http-equiv="cache-control" content="no-cache">
          <script type="text/javascript" src="./js/jsxml/jsxml.js"></script>
          <script type="text/javascript" src="./js/olele.js"></script>
          <script type="text/javascript" src="./js/element.js"></script>
          <script type="text/javascript" src="./js/page.js"></script>
          <script type="text/javascript" src="./js/import_export.js"></script>
          <script type="text/javascript" src="./js/string_helpers.js"></script>
          <!--script type="text/javascript" src="./js/modul.js"></script//-->
          </head>

          <frameset rows="75,*" frameborder="0" border="0" framespacing="0">
           <frame src="./head_lernseite2.html" name="topframe" scrolling="no" noresize="noresize">
             <frame src="./content.html" name="content" noresize="noresize">
             <!--frame src="./leer.html" name="bottom" scrolling="no" noresize="noresize"//-->
          <noframes>eLearning-Editor f&uuml;r den Schulbereich. Dieses Seite verwendet Frames. Bei Ihnen werden keine Frames angezeigt.</noframes>
          </frameset>
          </html

          Es reciht doch eine encoding-Angabe in der Frameset-Datei, oder?

          Pete

          1. Hi,

            Welche encoding-Angabe(n) gelten für die Seite?

            <head>
            <title>Fenstertitel</title>
            <link type="text/css" href="../css/configstyle.css" rel="stylesheet">
            <script type="text/javascript" src="../js/config.js"></script>
            <script type="text/javascript">
            </script>
            </head>

            Also keine encoding-Angaben. Schlecht. Solltest Du ändern.

            Laß mich raten, die beiden Browser mit den verschiedenen Ergebnissen haben unterschiedliche Default-Werte für das Encoding.

            Es reciht doch eine encoding-Angabe in der Frameset-Datei, oder?

            Nö. Eine encoding-Angabe in der Frameset-Datei gilt einzig und allein für diese Frameset-Datei.

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Also keine encoding-Angaben. Schlecht. Solltest Du ändern.

              Welche Encoding-Angaben wären denn so geschickt? Die ISO-????-1? Oder die UTF-8

              Laß mich raten, die beiden Browser mit den verschiedenen Ergebnissen haben unterschiedliche Default-Werte für das Encoding.

              Das kann natürlich sein. Leider stehen die Computer an verschiedenen Stellen, daher kann ich es nicht im Moment nachprüfen.

              Nö. Eine encoding-Angabe in der Frameset-Datei gilt einzig und allein für diese Frameset-Datei.

              Und wieder was dazugelernt.

              DAnke Pete

              1. Hi,

                Also keine encoding-Angaben. Schlecht. Solltest Du ändern.
                Welche Encoding-Angaben wären denn so geschickt? Die ISO-????-1? Oder die UTF-8

                Natürlich einzig und allein die, die dem tatsächlichen Encoding des Dokumentes entspricht.

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. So, ich habe jetzt alles soweit abgeändert:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      <head>
      <title>fenstername</title>
      <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
      <link type="text/css" href="../css/configstyle.css" rel="stylesheet">
      <script type="text/javascript" src="../js/config.js"></script>
      <script type="text/javascript">
      // ************* OLELE-Function **************************
      function transferPageData(){
       document.f.test.value =  unescape(escape(document.f.xml_file.value)) + '\n';
       document.f.test.value += unescape(escape('üöäpßßpöoijmklöööpoiklk \n '));
      }

      Das Ergebnis in der Textarea lautet:

      üöäpßßpöoijmklöööpoiklk \n
      ŸšŠp§§pšoijmklšššpoiklk

      Beim Firefox habe ich ebenfalls ISO-8859-1 eingestellt.

      Kann mir jetzt jemand noch helfen?

      Pete

      1. Hallo, Pete!

        Kann mir jetzt jemand noch helfen?

        du meinst das hier: ?

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html lang="de">
          <head>
            <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
          </head>
        <body>
        <script>
         function transferPageData(){
         e=document.f.a.value;
         document.f.e1.value =  unescape(escape(e));
         document.f.e1.value += unescape(escape('üöäpßßpöoijmklöööpoiklk \n |'));
        }
        </script>
        <form name="f">
        <textarea cols="40" rows="3" name="a">
        üöäpßßpöoijmklöööpoiklk
         |
        </textarea><br>
        <textarea cols="40" rows="4" name="e1"></textarea>
        <input type="button" value="go" onClick="transferPageData()">
        </form>
          </body>
        </html>

        hat bei mir wunderbar funktioniert.

        freundl. Grüsse aus Berlin, Raik

        1. hat bei mir wunderbar funktioniert.

          Nein, mir überhaupt nicht.

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
          <script type="text/javascript">
          function transferPageData() {
          e=document.f.a.value;document.f.e1.value = unescape(escape(e))+'\n';
          document.f.e1.value += unescape(escape('üöäpßßpöoijmklöööpoiklk'));
          }
          </script>
          </head>
          <body>
          <form name="f">
          <textarea cols="40" rows="3" name="a">üöäpßßpöoijmklöööpoiklk</textarea><br>
          <textarea cols="40" rows="4" name="e1"></textarea>
          <input type="button" value="go" onClick="transferPageData()"></form>
          </body>
          </html>

          Der Code sieht wie oben aus und das was ich bekomme ist:

          ŸšŠp§§pšoijmklšššpoiklk
          ŸšŠp§§pšoijmklšššpoiklk

          Immerhin schon mal das gleiche.

          Aber ich würde gerne die Umlaute sehen.

          Pete

          1. Hi,

            Der Code sieht wie oben aus und das was ich bekomme ist:

            ŸšŠp§§pšoijmklšššpoiklk
            ŸšŠp§§pšoijmklšššpoiklk

            Laß doch auch mal die Ergebnisse des Zwischenschritts (also die URLencodierten Strings) sehen.

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. » Laß doch auch mal die Ergebnisse des Zwischenschritts (also die URLencodierten Strings) sehen.

              Ohne Alles:
              ŸšŠp§§pšoijmklšššpoiklk
              ŸšŠp§§pšoijmklšššpoiklk

              Nur escape():
              %u0178%u0161%u0160p%A7%A7p%u0161oijmkl%u0161%u0161%u0161poiklk
              %u0178%u0161%u0160p%A7%A7p%u0161oijmkl%u0161%u0161%u0161poiklk

              Mit unescape(escape(e)):
              ŸšŠp§§pšoijmklšššpoiklk
              ŸšŠp§§pšoijmklšššpoiklk

              Zur gehörige Quelltext:

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
              <html>
              <head>
              <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
              <script type="text/javascript">
              function transferPageData() {
              e=document.f.a.value;

              document.f.e1.value = "Ohne Alles:\n";
              document.f.e1.value += e+'\n';
              document.f.e1.value += 'üöäpßßpöoijmklöööpoiklk'+'\n\n';

              document.f.e1.value += "Nur escape():\n";
              document.f.e1.value += escape(e)+'\n';
              document.f.e1.value += escape('üöäpßßpöoijmklöööpoiklk')+'\n\n';

              document.f.e1.value += "Mit unescape(escape(e)):\n";
              document.f.e1.value += unescape(escape(e))+'\n';
              document.f.e1.value += unescape(escape('üöäpßßpöoijmklöööpoiklk'))+'\n\n';
              }
              </script>
              </head>
              <body>
              <form name="f">
              <textarea cols="40" rows="3" name="a">üöäpßßpöoijmklöööpoiklk</textarea><br>
              <textarea cols="40" rows="10" name="e1"></textarea>
              <input type="button" value="go" onClick="transferPageData()"></form>
              </body>
              </html>

              1. Hi,

                Nur escape():
                %u0178%u0161%u0160p%A7%A7p%u0161oijmkl%u0161%u0161%u0161poiklk
                %u0178%u0161%u0160p%A7%A7p%u0161oijmkl%u0161%u0161%u0161poiklk
                Mit unescape(escape(e)):
                ŸšŠp§§pšoijmklšššpoiklk
                ŸšŠp§§pšoijmklšššpoiklk

                Das unescape tut also, was es soll.
                Beim escape scheint irgendein seltsames encoding vorausgesetzt zu werden ...

                cu,
                Andreas

                --
                Warum nennt sich Andreas hier MudGuard?
                Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                1. Das unescape tut also, was es soll.
                  Beim escape scheint irgendein seltsames encoding vorausgesetzt zu werden ...

                  Deswegen habe ich jetz einfach alle Encodings beim Firefox durchprobiert. Der einzige der geht ist Western(Mac Roman). Weiß der Himmel warum.

                  Pete

              2. Hallo Pete

                Ohne Alles:
                ŸšŠp§§pšoijmklšššpoiklk
                ŸšŠp§§pšoijmklšššpoiklk

                Beides identisch, sowohl aus der ersten Textarea ausgelesen,
                als auch direkt aus dem Javascript.
                Also muss der Fehler bereits hier auftreten.

                Ich kann bei mir keinen Fehler nachvollziehen.
                Vieleicht liefern folgende Fragen einen Anhaltspunkt.

                • Was zeigt die erste Textarea an?
                • Welcher/welche Browser?
                • Welches OS?
                • Welche Browsereinstellung zum Zeichensatz?
                • Lokal oder vom Server?
                • Welche Angabe zur Zeichenkodierung gibt liefert dieser aus?

                Auf Wiederlesen
                Detlef

                --
                - Wissen ist gut
                - Können ist besser
                - aber das Beste und Interessanteste ist der Weg dahin!
                  • Was zeigt die erste Textarea an?

                  ŸšŠp§§pšoijmklšššpoiklk

                  • Welcher/welche Browser?

                  FireFox 1.0

                  • Welches OS?

                  OSX 10.3.5

                  • Welche Browsereinstellung zum Zeichensatz?

                  Bislang ISO-8859-1

                  • Lokal oder vom Server?

                  Lokal ohne Server

                  • Welche Angabe zur Zeichenkodierung gibt liefert dieser aus?

                  Kein Server - keine Zeichenkodierung. Selbst wenn, wie finde ich das raus?

                  Pete

                  1. Hallo Pete

                    • Was zeigt die erste Textarea an?
                      ŸšŠp§§pšoijmklšššpoiklk

                    Wird sonstiger Text auf der Seite richtig kodiert?
                    Eventuell eine abweichende Kodierung zwischen Editor und Browser?

                    • Welcher/welche Browser?
                      FireFox 1.0
                    • Welches OS?
                      OSX 10.3.5

                    Firefox unter OSX, dazu kann ich leider nichts sagen.

                    Kein Server - keine Zeichenkodierung. Selbst wenn, wie finde ich das raus?

                    Also die Zeichenkodierung die in der Seite angegeben ist.
                    Wird diese vom verwendeten Editor unterstützt?
                    Was passiert, wenn du den Text im Browser in die erste Textarea eingibst,
                    statt diese im Quelltext zu füllen?

                    Auf Wiederlesen
                    Detlef

                    --
                    - Wissen ist gut
                    - Können ist besser
                    - aber das Beste und Interessanteste ist der Weg dahin!
                    1. Also die Zeichenkodierung die in der Seite angegeben ist.
                      Wird diese vom verwendeten Editor unterstützt?
                      Was passiert, wenn du den Text im Browser in die erste Textarea eingibst,
                      statt diese im Quelltext zu füllen?

                      ich habe jetzt rausgefunden, dass bei Auswahl von "Wesern(MacRoman)"-Encoding alles geht.

                      Allerdigns finde ich es dennoch merkwürdig, dass er den meta-Tag der Seite ignoriert. Wofür gibt es den denn dann?

                      Pete

                      1. Hallo,

                        Also die Zeichenkodierung die in der Seite angegeben ist.
                        Wird diese vom verwendeten Editor unterstützt?

                        ^^^^^^

                        Was passiert, wenn du den Text im Browser in die erste Textarea eingibst,
                        statt diese im Quelltext zu füllen?

                        Was passiert dann bei ISO-8859-1?

                        ich habe jetzt rausgefunden, dass bei Auswahl von "Wesern(MacRoman)"-Encoding alles geht.

                        Wie sieht es dann in meinem Browser bei ISO-8859-1 aus?
                        OK, vielleicht kein Problem, mein Browser kann auch Western(MacRoman),
                        aber wird der Server das dann auch mit dieser Angabe ausliefern?

                        Vielleicht verwendet dein Editor standardmäßig Western(MacRoman)?

                        Allerdigns finde ich es dennoch merkwürdig, dass er den meta-Tag der Seite ignoriert. Wofür gibt es den denn dann?

                        Ich denke eher, er ignoriert ihn nicht.

                        Auf Wiederlesen
                        Detlef

                        --
                        - Wissen ist gut
                        - Können ist besser
                        - aber das Beste und Interessanteste ist der Weg dahin!
          2. Hallo, Pete!

            hat bei mir wunderbar funktioniert.
            Nein, mir überhaupt nicht.

            dann muss an deinem browser was kaputt sein. ich hab deinen code kopiert und hier ausgeführt und es funktioniert.
            probiers doch noch mal mit UTF-8.

            freundl. Grüsse aus Berlin, Raik