seth_not@home: \n und direkter Umbruch im Quellcode

Beitrag lesen

gudn tach!

Ich will ein Newsarchiv erstellen und dieses in einer Datei namens newsarchiv.inc speichern. Dann soll ein PHP-Script jeweils die einzelnen Einträge rausfiltern und z.B. die letzten 3 in HTML-Code anzeigen. Dafür muss ich die newsarchiv.inc ja einlesen und diese besitzt natürlich Zeilenumbrüche. Die Zeilenumbrüche sind ja aber (wie ich dich verstanden habe) in Linux und Windows anders zu interpretieren oder? gibt es eine Lösung für beide?

ah, ok. ja, gibt's.

ich gehe mal davon aus, dass ein zeilenumbruch (egal ob nun "\n" oder "\r\n") als trennsymbol der einzelnen news dient.

mit file() kannst du die datei zeilenweise in ein array einlesen. als zeilenende wird hier iirc nur "\n" akzeptiert. macht aber nix, das ist ja sowohl im windows- als auch im linux-format vorhanden. im windows-format ist halt bloss zusaetzlich noch ein "\r" davor (falls du auf den alten mac-zeilenumbruch ruecksicht nehmen willst, beachte auto_detect_line_endings).

im html-code sind "\r" und "\n" weitgehend egal. wenn du also die letzten drei elemente vom via file ausgelesenen array ausgibst, ist es eher woscht, ob da nun noch "\r" drinhaengt oder nicht. falls du dennoch lieber die "\n" und etwaige "\r" vor der ausgabe loeschen moechtest, dann geht das z.b. mit rtrim().

und jetzt noch mal zur verdeutlichung der unterschiede, fuers archiv (oder hat das schon mal einer genauer erklaert?):
datei_nix.txt sei "a\nb"
datei_win.txt sei "a\r\nb"

oeffnest du die datei datei_nix.txt in einem texteditor im unix-format erscheint
a
b
das gleiche erscheint bei der datei datei_win.txt in notepad.

oeffnest du aber die datei_nix.txt in notepad dann wird "\n" nicht als zeilenumbruch, sondern als irgendein nicht gescheit darstellbares zeichen interpretiert, was meist durch ein leeres rechteck dargestellt wird, also in etwa so:
a[]b
(das richtige rechteck habe ich jetzt im unicode nicht suchen wollen und stattdessen einfach box-brackets genommen)
in einem texteditor, der die datei datei_win.txt im unix-format liest wird dagegen das "\n" zwar als zeilenumbruch erkannt, aber das zeichen davor, also "\r", wird als zusaetzliches zeichen angesehen. dargestellt wird es oft durch ^M, also
a^M
b
es gibt programme fuer beide betriebssysteme (windows, *nix), die beide formate unterstuetzen. allerdings ist standardmaessig/traditionell eben "\n" in *nix und "\r\n" in windows der zeilenumbruch.

prost
seth