Zeilenumbruch entfernen
Jan K.
- php
Hallo Forum,
mich treiben die Zeilenumbrüche im Arrayelement "projectdescription" in den Wahnsinn:
Mit $x=trim($x) bekomme ich die nicht weg un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!
So sieht der Text "projectdescription" in der Datenbank aus:
Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.
Hat jemand eine Ahnung wie ich die Zeilenumbrüche loswerden kann?
Grüße aus Berlin,
Jan
Hi,
mich treiben die Zeilenumbrüche im Arrayelement "projectdescription" in den Wahnsinn: [...]
Mit $x=trim($x) bekomme ich die nicht weg
Logisch, trim trimmt nur an den Rändern, nicht mittendrin.
un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!
Dann sind sie vermutlich nicht \n bzw. nicht nur \n.
Dass Zeilenumbrüche je nach Betriebssystem bzw. daran angelehnter Speicherungsart unterschiedliches Format haben können, sollte doch wohl bekannt sein.
MfG ChrisB
hi,
Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.
Wenn die JS-Funktion alert() heißt, geht es: alert("Zeile 1\nZeile 2") zeigt beide Zeilen untereinander.
Siehe auch ChrisB, finde heraus, wie auf Deinem System ein Zeilenumbruch kodiert ist und breite das entsprechend auf.
Hotti
Hi,
hi,
Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.
Wenn die JS-Funktion alert() heißt, geht es: alert("Zeile 1\nZeile 2") zeigt beide Zeilen untereinander.
Das ist ja auch ein anderer Kontext. Wenn ich das vom OP gesagt auf dein Beispiel übersetze:
$string = "Zeile1\nZeile2";
echo 'alert("' . $string . "');'; // bewusst falsch!
Die Ausgabe ist folgendes (im JS-Kontext):
alert("Zeile1
Zeile2");
und dabei kommt dann die Fehlermeldung (im Browser, hier FF):
Fehler: unterminated string literal
Quelldatei: http://localhost/~matti/ttt.html
Zeile: 9, Spalte: 9
Quelltext:
alert("Zeile1
Bis die Tage,
Matti
Hello Jan,
mich treiben die Zeilenumbrüche im Arrayelement "projectdescription" in den Wahnsinn:
Mit $x=trim($x) bekomme ich die nicht weg un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!
Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.
Dann solltest Du alle Whitespaces erst dann in Leerzeichen umwandeln, wenn es soweit ist, Du also die Javascript-Funktion "fütterst".
Dafür könntest Du str_replace() in der Arrayvariante benutzten.
http://de.php.net/manual/en/function.str-replace.php
Erst die Mehrbytezeichen ersetzen, dann die verbliebenen Einbytezeichen.
http://php.net/manual/en/language.types.string.php siehe Tabelle
"\r\n" sollte die erste Sequenz sein, nach der Du suchen lässt, dann "\r", "\n" und die übrigen.
Außerdem ist es empfehlenswert, sich auch nochmal
http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel
durchzulesen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Besten Dank, \r\b funktioniert bestens.
Den Artikel aus dem Wiki habe ich mir gespeichert und lese mir den demnächst durch.
Gruß,
Jan
Besten Dank, \r\b funktioniert bestens.
Ein vertipper, du meinst \r\n - aber auch das ist nicht sicher,
Eu solltest eher \r, \n oder \r\n suchen (auch in mehrfacher Eusfertigung) suchen.
Elegant lässt sich das mit dem Ausdruck /\r|\n|\r\n/ oder /(\r|\n)+/ beschreiben.
Hello,
Besten Dank, \r\b funktioniert bestens.
Ein vertipper, du meinst \r\n - aber auch das ist nicht sicher,
Eu solltest eher \r, \n oder \r\n suchen (auch in mehrfacher Eusfertigung) suchen.
Elegant lässt sich das mit dem Ausdruck /\r|\n|\r\n/ oder /(\r|\n)+/ beschreiben.
Es müssen erst die längsten, dann die kürzeren Sequenzen gesucht und ersetzt werden, sonst werden "\r\n" eventuell als zwei Zeichen angesehen. Ist ja sozusagen ein "Multibyte-Zeichen".
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Besten Dank, \r\b funktioniert bestens.
Du meinst "\r\n" ?
Dann solltest Du anschließend aber noch die anderen Whitespaces (außer Leerzeichen) in Leerzeichen umwandeln. Was User so senden, ist nie wirklich sicher. Das Format sollte deshalb immer vor der Weiterverarbeitung auf den nächsten Schritt vorbereitet werden, also kontextgerecht aufbereitet werden.
In der DB kannst Du trotzdem die Rohdaten des Users (selbstverständlich auch für die Speicherung vorbehandelt, also 'escaped'), speichern. Wer weiß jetzt schon, wofür du sie später in der vollständigen Form noch benötigen wirst?
Den Artikel aus dem Wiki habe ich mir gespeichert und lese mir den demnächst durch.
Ja, der sollte Dir noch ein paar neue Anregungen geben, auf was Du wann achten solltest.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi!
Mit $x=trim($x) bekomme ich die nicht weg un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!
Wenn es wirklich um die Zeilenumbrüche ginge, wäre es sinnvoll, entweder alle Kombinationen von \r und \n zu beachten oder sich zunächst zu informieren, welche Zeichen da nun wirklich vorhanden sind. Missbrauchen lässt sich dafür die Funktion url_encode(). Anhand der %xx-Werte und einer ASCII-Tabelle kann man die Zeichen identifizieren.
Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.
Dann ist das eigentliche Problem nur/wieder ein nicht beachteter Kontextwechsel. Die Zeilenumbrüche müssen nicht unbedingt verschwinden, nur Javascript-gerecht notiert werden. Eine Funktion dafür ist im bereits verlinkten Artikel zu finden.
Lo!
Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.
Mal mit JSON versucht?
http://de.php.net/manual/en/function.json-encode.php