Patrick: Was bedeutet \r? Wo finde ich Hilfen zu Kürzeln?

Hallo!

Kleine Frage...
\n ist z.B. ein Zeilenumbruch
Was ist \r? Nach rund 9 Monaten PHP ist mir das heute zum ersten Mal über den Weg gelaufen!
Gibt es da noch mehr Kürzel in dieser Richtung? Wo finde ich eine Auflistung? Bzw. Unter welchem Oberbegriff muss ich nach so etwas suchen, um Hilfen zu finden?

Gruß Patrick

  1. Holladiewaldfee,

    Was ist \r? Nach rund 9 Monaten PHP ist mir das heute zum ersten Mal über den Weg gelaufen!

    Carriage Return (Wagenrücklauf).

    Unter Windows werden Zeilen mit "\r\n" abgeschlossen, unter Unix/Linux mit "\n" und unter den alten Mac-Versionen mit "\r".

    Gibt es da noch mehr Kürzel in dieser Richtung?

    \t ist ein Tabulator.
    \ ein Backslash
    " ein Anführungszeichen
    ' auch

    Dann gibt's noch viel Zeug, was man eigentlich nie trifft.

    Wo finde ich eine Auflistung?

    Schau mal im PHP-Manual an der Stelle, wo der Unterschied zwischen " und ' erklärt wird.

    Ciao,

    Harry

    --
      Intelligenz ist nicht zwingend etwas positives.
      Man weiß erst, was man hatte, wenn man es verloren hat.
    1. Hallo Harry,

      Unter Windows werden Zeilen mit "\r\n" abgeschlossen,

      Falsch ;) Mit \n.

      unter Unix/Linux mit "\n"

      Stimmt.

      und unter den alten Mac-Versionen mit "\r".

      Nein ;) mit \n.

      Denk daran, dass \n auf den jeweiligen Plattformen durch die
      libc umgesetzt wird in die Bytefolge \015\012 auf Windows-,
      \012 auf Unix- und \015 auf Mac-Systemen < MacOS X.

      Gruesse,
       CK

      --
      http://cforum.teamone.de/
      http://wishlist.tetekum.de/
      If God had meant for us to be in the Army, we would have been born with green, baggy skin.
      1. Holladiewaldfee,

        Denk daran, dass \n auf den jeweiligen Plattformen durch die
        libc umgesetzt wird in die Bytefolge \015\012 auf Windows-,
        \012 auf Unix- und \015 auf Mac-Systemen < MacOS X.

        Meine Mutter backt zu Weihnachten auch immer Plätzchen :)

        Ciao,

        Harry

        PS: Ich dachte immer \n=h10, \r=h13 ... der Rest ist mir zu hoch ;)

        --
          Intelligenz ist nicht zwingend etwas positives.
          Man weiß erst, was man hatte, wenn man es verloren hat.
        1. Hallo Harry,

          Denk daran, dass \n auf den jeweiligen Plattformen
          durch die libc umgesetzt wird in die Bytefolge \015\012
          auf Windows-, \012 auf Unix- und \015 auf
          Mac-Systemen < MacOS X.

          »» PS: Ich dachte immer \n=h10, \r=h13

          Nein :) \n ist plattformabhaengig. Je nach Plattform ist es
          unterschiedlich, was \n bedeutet. Das wird Software-Intern
          umgesetzt in \015\012 auf Windows-, \012 auf Unix- und \015
          auf Mac-Plattformen < MacOS X.

          Gruesse,
           CK

          --
          http://cforum.teamone.de/
          http://wishlist.tetekum.de/
          If God had meant for us to be in the Army, we would have been born with green, baggy skin.
      2. Hallo,

        Denk daran, dass \n auf den jeweiligen Plattformen durch die libc umgesetzt wird in die Bytefolge \015\012 auf Windows-, \012 auf Unix- und \015 auf Mac-Systemen < MacOS X.

        Ich weiß nicht, worauf du hinauswillst, aber es ging - so habe ich zumindest Harrys Aussage und das Ausgangsposting verstanden - ausschließlich um PHP. Und in PHP ist \n meines Wissens immer exakt \x0A, und es wird auch nicht abhängig von der Plattform automatisch umgesetzt. Deiner Aussage nach müsste \n in PHP-Scripten auf Windows zwei Zeichen ergeben, das ist aber selbst beim Schreiben von Dateien nicht der Fall. Wenn man also mit PHP CR/LF schreiben will, ist \r\n angemessen und m.W. immer eindeutig.

        Was darüber hinaus bei anderer Software im Allgemeinen abläuft, war ja nicht Thema dieses Threads und auch nicht Teil Harrys Aussage.

        Mathias

        --
        Fabian Transchel, du hast mein Leben zerstört.
        1. Hallo molily,

          Denk daran, dass \n auf den jeweiligen Plattformen
          durch die libc umgesetzt wird in die Bytefolge \015\012
          auf Windows-, \012 auf Unix- und \015 auf
          Mac-Systemen < MacOS X.

          Ich weiß nicht, worauf du hinauswillst, aber es ging - so
          habe ich zumindest Harrys Aussage und das Ausgangsposting
          verstanden - ausschließlich um PHP.

          Und? Auch PHP benutzt eine ganz normale libc.

          Und in PHP ist \n meines Wissens immer exakt \x0A,

          Dann ist dein Wissen falsch. Sagt ueberigens auch das Manual:
          \n wird beim 'rausschreiben unter Windows in \015\012
          ungewandelt und umgekehrt beim einlesen. Um das zu verhindern,
          muessen Dateien im Binary-Modus geoeffnet werden.

          und es wird auch nicht abhängig von der Plattform
          automatisch umgesetzt. Deiner Aussage nach müsste \n in
          PHP-Scripten auf Windows zwei Zeichen ergeben, das ist
          aber selbst beim Schreiben von Dateien nicht der Fall.

          Doch. Such dir einen Hex-Editor deiner Wahl und schaue dir
          die Ausgabe von folgendem Posting an:

          $fd = fopen("file.dat",'w');
          fwrite($fd,"\n");
          fclose($fd);

          $fd = fopen("file.dat.binary",'wb');
          fwrite($fd,"\n");
          fclose($fd);

          Mein Hexdump sagt:

          file.dat:
          0000000 0a0d
          0000002

          file.dat.binary:
          0000000 000a
          0000001

          Was darüber hinaus bei anderer Software im Allgemeinen
          abläuft, war ja nicht Thema dieses Threads und auch nicht
          Teil Harrys Aussage.

          Ich glaube nicht, dass du mich darueber belehren musst, was
          Thema dieses Threads ist.

          Gruesse,
           CK

          --
          http://cforum.teamone.de/
          http://wishlist.tetekum.de/
          If God had meant for us to be in the Army, we would have been born with green, baggy skin.
          1. Moin!

            Und in PHP ist \n meines Wissens immer exakt \x0A,

            Dann ist dein Wissen falsch. Sagt ueberigens auch das Manual:
            \n wird beim 'rausschreiben unter Windows in \015\012
            ungewandelt und umgekehrt beim einlesen. Um das zu verhindern,
            muessen Dateien im Binary-Modus geoeffnet werden.

            Ok, die Dateioperationen sind nochmal was ganz anderes.

            Aber grundsätzlich ergibt ein String laut Doku:
            http://de3.php.net/manual/de/language.types.string.php#language.types.string.syntax.double

            Die Tatsache, dass in den Useranmerkungen dazu keinerlei Diskussion herrscht deutet darauf hin, dass es wohl tatsächlich so ist.

            Doch. Such dir einen Hex-Editor deiner Wahl und schaue dir
            die Ausgabe von folgendem Posting an:

            Was beweist bzw. zeigt dein Codebeispiel? (rhetorische Frage, ich gebe die Antwort am Objekt)

            $fd = fopen("file.dat",'w');
            fwrite($fd,"\n");
            fclose($fd);

            file.dat:
            0000000 0a0d
            0000002

            Hier wird ein einzelnes LF-Zeichen in eine Datei geschrieben, die im Textmodus (sofern das OS diese Unterscheidung macht) zum Schreiben geöffnet wurde. Dadurch wird das LF konvertiert in ein CRLF (zwei Bytes), die sich im Hexdump auch so zeigen.

            $fd = fopen("file.dat.binary",'wb');
            fwrite($fd,"\n");
            fclose($fd);

            file.dat.binary:
            0000000 000a
            0000001

            Hier hingegen wird ein einzelnes LF-Zeichen in eine Datei geschrieben, die im Binärmodus geöffnet wurde und deshalb keinerlei Konvertierung stattfindet. Erwartungsgemäß wird das im String enthaltene einzelne Byte des LF in die Datei geschrieben.

            Du hast bewiesen, dass "\n" unter PHP immer ein einzelnes LF-Zeichen ist - wie könnte es sonst allein in die Binärdatei gelangen. Wäre "\n" plattformabhängig mal LF, und mal CRLF, dann müßte in beiden Hexdumps mindestens ein CRLF auftauchen.

            Merke:
            \n === \x0A
            \r === \x0D

            für alle PHP-Versionen und -Plattformen. Das gilt insbesondere für Stringvergleiche und reguläre Ausdrücke, die diese Zeichen verwenden.

            Davon aber ganz unabhängig ist die Tatsache, dass Dateioperationen am Zeilenendekennzeichen durchaus rumfummeln können. Die diesbezügliche Aussage ist also zumindest nicht vollständig korrekt - ich könnte auch "falsch" sagen.

            - Sven Rautenberg

            --
            ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
            1. Hallo Sven,

              Ok, die Dateioperationen sind nochmal was ganz anderes.

              Nein ;)

              Die Tatsache, dass in den Useranmerkungen dazu keinerlei
              Diskussion herrscht deutet darauf hin, dass es wohl
              tatsächlich so ist.

              Das habe ich nie bestritten. Wenn du nachliest, wirst du
              feststellen, dass ich gesagt habe, dass \n konvertiert wird
              nach \015\012.

              Hier wird ein einzelnes LF-Zeichen in eine Datei
              geschrieben, die im Textmodus (sofern das OS diese
              Unterscheidung macht) zum Schreiben geöffnet wurde.
              Dadurch wird das LF konvertiert in ein CRLF (zwei Bytes),
              die sich im Hexdump auch so zeigen.

              Richtig.

              $fd = fopen("file.dat.binary",'wb');
              fwrite($fd,"\n");
              fclose($fd);

              file.dat.binary:
              0000000 000a
              0000001

              Hier hingegen wird ein einzelnes LF-Zeichen in eine Datei
              geschrieben, die im Binärmodus geöffnet wurde und deshalb
              keinerlei Konvertierung stattfindet. Erwartungsgemäß wird
              das im String enthaltene einzelne Byte des LF in die Datei
              geschrieben.

              Richtig.

              Du hast bewiesen, dass "\n" unter PHP immer ein einzelnes
              LF-Zeichen ist - wie könnte es sonst allein in die
              Binärdatei gelangen.

              Du hast mich nicht verstanden.

              Wäre "\n" plattformabhängig mal LF, und mal CRLF, dann
              müßte in beiden Hexdumps mindestens ein CRLF auftauchen.

              \n *ist* plattformabhaengig. Oben bewiesen.

              Davon aber ganz unabhängig ist die Tatsache, dass
              Dateioperationen am Zeilenendekennzeichen durchaus
              rumfummeln können. Die diesbezügliche Aussage ist also
              zumindest nicht vollständig korrekt - ich könnte auch
              "falsch" sagen.

              Nein, du hast sie nur nicht richtig verstanden ;) Du
              widersprichst mir nicht einmal in deinem Posting. Im
              Gegenteil. Du bekraeftigst, was ich gesagt habe.

              Gruesse,
               CK

              --
              http://cforum.teamone.de/
              http://wishlist.tetekum.de/
              If God had meant for us to be in the Army, we would have been born with green, baggy skin.
          2. Hallo,

            Deiner Aussage nach müsste \n in PHP-Scripten auf Windows zwei Zeichen ergeben, das ist aber selbst beim Schreiben von Dateien nicht der Fall.

            Such dir einen Hex-Editor deiner Wahl und schaue dir die Ausgabe von folgendem Posting an:

            $fd = fopen("file.dat",'w');
            fwrite($fd,"\n");
            fclose($fd);

            $fd = fopen("file.dat.binary",'wb');
            fwrite($fd,"\n");
            fclose($fd);

            Diesen Test habe ich gemacht, bevor ich mein Posting schrieb. Ich habe mir das nicht ausdacht und erzähle auch keine Märchen. Deine Aussage trifft nur zu, wenn ich das Script über das Apache-PHP-Modul ausführe. Über CGI beziehungsweise die Kommandozeile - darüber hatte ich es geprüft - sind die erzeugten Dateien Bit für Bit identisch und enthalten exakt und ausschließlich 0A, daher meine Aussage. Win98, PHP 4.3.0.

            Ich glaube nicht, dass du mich darueber belehren musst, was Thema dieses Threads ist.

            Komm mal herunter. Ich wollte niemanden belehren.

            Mathias

            --
            Fabian Transchel, du hast mein Leben zerstört.
  2. Hallo!

    Kleine Frage...
    \n ist z.B. ein Zeilenumbruch
    Was ist \r? Nach rund 9 Monaten PHP ist mir das heute zum ersten Mal über den Weg gelaufen!
    Gibt es da noch mehr Kürzel in dieser Richtung? Wo finde ich eine Auflistung? Bzw. Unter welchem Oberbegriff muss ich nach so etwas suchen, um Hilfen zu finden?

    Es wird wohl Zeit dass Du Dir mal einen genauern Überblick über das Manual(http://de3.php.net/manual/de/) verschaffst, da findest Du z.B. unter Typen -> Stings folgende Tabelle:
    http://de3.php.net/manual/de/language.types.string.php#AEN3151

    Es lohnt sich wirklich mal einen Blick in andere Bereiche als immer nur die Funktionsreferenzen zu werfen!

    Grüße
    Andreas