falsche Umbrüche beim Mac. Ein nl2br - Problem ?
mario
- php
Liebe Forumianer,
folgendes Problem: Ich habe ein Literaturforum, das auch von Mac-Usern genutzt wird. Wenn Mac-User ihren Text eingeben, wird er später wie folgt umgebrochen angezeigt:
Zurück zu Ihnen, Herr Dr. Winkler. Es gibt am nördlichen
Ende der Pferdekoppel, die sowas wie das Aushängeschild
des Dorfes ist, kurz vorm Wald, einen wallartigen, meist
violetten, dann aber plötzlich gelben Berberitzenbusch. Den
beobachte ich seit drei Jahren. Der steht da und wartet, das
sehe ich genau.
Richtig wäre aber:
Zurück zu Ihnen, Herr Dr. Winkler. Es gibt am nördlichen Ende der Pferdekoppel, die sowas wie das Aushängeschild des Dorfes ist, kurz vorm Wald, einen wallartigen, meist violetten, dann aber plötzlich gelben Berberitzenbusch. Den beobachte ich seit drei Jahren. Der steht da und wartet, das sehe ich genau.
Folgende Sachen kann ich schon ausschließen:
Was passiert innerhalb des Scripts:
Die Texte werden 1:1 in die Datenbank übernommen. Bei der Darstellung der Texte wird das Datenbankergebnis wie folgt manipuliert:
$text=nl2br(htmlentities(stripslashes($text)));
Dann folgt echo "..." usw. usf.
Statt dem nl2br habe ich auch schon folgende Routine ausprobiert:
$text=preg_replace("/(1512)|(15)|(12)/","<br>", $text);
Angeblich sollte sie auf die Verschiedenheiten der BSysteme Rücksicht nehmen (Win / Unix / Mac). Doch leider funktioniert sie einfach nicht. Sie erkennt irgendwie die Umbrüche überhaupt nicht.
Kann mir jemand bei der Fehlersuche helfen bzw. hat jemand eine völlig andere Idee?
Vielen Dank
Mario
Hallo mario,
$text=preg_replace("/(1512)|(15)|(12)/","<br>", $text);
Meines Wissens nach müsste der RegEx so aussehen: "/\015\012|\012|\015/" oder alternativ "/\r\n|\r|\n/". Siehe </archiv/2003/12/65990/#m376014/>.
Grüße
Torsten
PS. PHP-Spezifika vorbehalten ;-)
Hallo Torsten,
Der korrigierte RegEx funktioniert jetzt richtig. Vielen Dank. ABER: Leider ist mein Problem nicht gelöst. Die Texte werden nach wie vor wie oben beschrieben angezeigt. Ich habe sozusagen den selben Effekt wie mit nl2br erreicht.
Hast Du noch eine andere Idee? Vielleicht muß etwas passieren, bevor der Text in die DB kommt. Jeder Umbruch der nicht durch ein Enter ausgelöst wurde, wird gelöscht. Alle anderen werden beibehalten und später richtig interpretiert. Kann so etwas gefiltert werden? Gibt es einen solchen Unterschied zwischen den Umbrüchen?
Vielen Dank,
Mario
Hallo mario,
Der korrigierte RegEx funktioniert jetzt richtig. Vielen Dank. ABER: Leider ist mein Problem nicht gelöst. Die Texte werden nach wie vor wie oben beschrieben angezeigt. Ich habe sozusagen den selben Effekt wie mit nl2br erreicht.
Vorab zur Info: ich habe keine Ahnung von PHP ;-)
Hast Du noch eine andere Idee? Vielleicht muß etwas passieren, bevor der Text in die DB kommt.
Wie soll der Text denn in die DB kommen? Wenn ich dich richtig verstanden habe doch ohne jeglichen Zeilenumbruch, denn die Formatierung des Textes möchtest du doch bei Ausgabe vornehmen, oder? Dann lösche doch einfach die Zeilenumbrüche oder besser ersetze sie durch Leerzeichen. Dann hast du im Ergebnis einen fortlaufenden Text.
Jeder Umbruch der nicht durch ein Enter ausgelöst wurde, wird gelöscht. Alle anderen werden beibehalten und später richtig interpretiert.
Hm? Wie kommt ein Zeilenumbruch in einen laufenden Text, ohne die Entertaste zu drücken? Wenn du zwischen erwünschten und unerwünschten Zeilenumbrüchen unterscheiden willst, dann könnte dir vielleicht BBCode weiterhelfen. Das bedeutet, dass du festlegst, dass ein bestimmter Code im Text einen ausdrücklich gewollten Umbruch darstellt (sowas wie [umbr]). Dann kannst du die Umbrüche mit Hilfe zweier preg_match-Anweisungen behandeln:
Unerwünschte:
$text=preg_replace("/\015\012|\012|\015/"," ", $text);
Erwünschte:
$text=preg_replace("/[umbr]/","<br>", $text);
Oder so ähnlich ;-)
Grüße
Torsten