Was bedeutet \r? Wo finde ich Hilfen zu Kürzeln?
Patrick
- php
0 Harry0 Christian Kruse
0 Andreas Korthaus
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
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
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
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 ;)
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
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
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
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
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
0000001Hier 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
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
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