Hello,
ich lasse in einem formular für ein gästebuch die leerzeile (chr(13) bzw. chr(10)) durch ein einfaches '<br />' ersetzen. gebe ich jetzt im formluar folgenden beispiel text ein:
lorem ipsum [return]
dolor sit amet
erzeugt dieser folgende ausgabe
lorem ipsum
doppeltes <br />
dolor sit amet
es wird bei jeder returntaste, das '<br />' verdoppelt...
Die Browser sollten einen Returntastendruck _einheitlich_ durch ein "\r\n"
bzw eigentlich durch ein 0D 0A (hex) ersetzen, und zwar unabhängig davon, ob sie auf einem MAC OS, einem WinDOS, oder einem *X-System laufen. Wie sie das intern regeln, ist ihnen überlassen, aber für in den übertragenen Daten muss es so aussehen.
Wenn DU nun z.B. mal einen Text, der entweder nur 0D oder nur 0A Zeichen verwendet, in eine Textarea per Vorbelegung schreibst, dann werden diese Zeichen im Browser automatisch wieder zu einem vollständigen 0D 0A Paar ergänzt.
Wenn der Text nun mit dem Request an das Script übertragen wird, musst Du im Script also
1. erst alle 0D 0A tauschen,
2. dann nachschauen, ob noch einzelne 0D vorhanden sind und die tauschen
3. und dann noch nach einzelnen 0A suchen und die auch noch tauschen.
2. und 3. darf eigentlich nicht vorkommen, aber nicht alle Browser halten sich an die Betriebssystem-Unabhängigkeits-Vorschrift.
In Hochsprachen werden die Synonyme "\r" und "\n" häufig nochmals gegen das auf dem jeweiligen OS gültige Zeilenendezeichen getauscht. So wird vom Compiler einer Hochsprache X das "\n" auf einem MAC z.B. durch ein 0Dh ersetzt, auf einem *X aber durch 0Ah.
Da man sich darauf aber nicht verlassen kann, benutzt man für die Ersetzungsregel nicht die Synonyme, sondern den numerischen Code. In PHP wird diese Ersetzung allerdings nicht OS-Abhängig vorgenommen, sondern ein "\n" immer durch 0Ah und ein "\r" immer durch 0Dh ersetzt.
Nimm aber trotzdem die numerischen Codes ;-))
str_replace(array(chr(13).chr(10),chr(13),chr(10)),"<br />",$text);
müsste Deinen Ansprüchen gerecht werden.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau