Ungewollter Zeilenumbruch
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
attribut
ausgabe
code
datum
eingabe
entfernen
ersetzen
ewigkeit
form
formular
http
ordern
quelle
ruhe
speiche
standard
text
url
wissen
-
Ich lassen einen text aus einem Textfeld splitten und es in ein anderes ausgeben. Leider wird nach jedem einfügen des Textes ein ein Zeillenumbruch gemacht.
Wie kann ich das verhindern, oder ist das nicht Möglich?
Code
<?php $array = explode ( '\\n', $ul ); for ( $x = 1; $x < count ( $array ); $x++ ) { echo "Hallo ".$array[$x].", wie geht es dir? <br>"; } ?>
Raus kommt
Hallo David
, wie geht es dir?
Hallo Kevin
, wie geht es dir? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
boyman schrieb:
<?php $array = explode ( '\\n', $ul ); for ( $x = 1; $x < count ( $array ); $x++ ) { echo "Hallo ".$array[$x].", wie geht es dir? <br>"; } ?>
\n sorgt für einen Zeilenumbruch und <br> auch. Wenn du den Zeilenumbruch nach dem Namen weg haben willst, dann lass \n weg, wenn du den Zeilenumbruch nach dem Satz weg haben willst, dann lass <br> weg. (Ich habe es aber nicht ausprobiert.)
-
Das \n ist wonach er im text sucht.
-
Wäre es denn möglich das du /n anderster nennst z:B. /x oder wie auch immer du willst. Weil PHP versteht das /n wie ein <br />.
-
so geht es:
$array = explode("\n", trim($ul)); for($x = 0; $x < count($array); $x++) { echo "Hallo ".$array[$x].", wie geht es dir? <br>"; }
die beispieldaten sind dabei so
. wobei mit "\n" ist nicht zu spaßen. es kann auch anders heißen. für eine richtige behandlung - falls alles richtig gemacht wurde (ich kann es allerdings nicht wissen) - ist mit PHP_EOL.$ul = "\nDavid\nKevin\n";
-
Funktioniert leider auch nicht. Beim ersten Namen macht er trotzdem einen Zeilenumbruch.
-
boyman schrieb:
wie kommst du auf die daten? was steht in dem string? wir sind leider keine hellseher da :(
Funktioniert leider auch nicht. Beim ersten Namen macht er trotzdem einen Zeilenumbruch.
wenn du doppelte/mehrfache '\n'-s drin hast, ist das natürlich auch ein problem und gehört behandelt! also. wocher kommen die daten und wie sehen sie aus? -
boyman schrieb:
woran man ja wieder erkennen kann, wie nett formulare funktionieren :)
Ich gebe die daten über ein formular ein und speiche es dann in eine Variable.
in ein form kann jede(r) eingeben, was er/sie will. allein du kannst es wissen, wie du die daten haben willst und was du zu tun hast, um die von dir 'erschaffene ordnung' zu wahren/erzwingen/...(????)
wenn du irgendwo - trotz erwartung ! - umbrüche hast (welcher art auch immer), musst du dafür sorgen, dass sie wieder verschwinden. dafür gibt es (auch) bei php standardvorgänge.
eventuell könnte auch noch helfen, wen du deine form hier mal zeigen könntest.
(ich mag keine blindflüge ;)
Beitrag zuletzt geändert: 8.10.2013 0:46:48 von czibere -
Hier ist der Code vom Formular
<form id="form1" name="form1" action="auswerten.php" method="post"> <textarea name="text" rows="4" style="width: 300px;" wrap="virtual"></textarea><br /> <input name="submit" type="submit" value="Auswerten"> </form>
-
Jupp, Blindflüge sind immer uncool.
Bei Hilfe bitte auch immer etwas mehr Code liefern, da es ja offensichtlich ist, dass der Fehler aus dem Formular kommt.
Ich hoffe mal nicht im Code etwas zu finden, dass mutwillig new lines erzeugt.
Von daher, sollte deine Eingabe im Formular ja auch Zeilenumbrüche enthalten, so wie in der Ausgabe hier.
Aber da du ja scheinbar keine Zeilenumbrüche möchtest, dein Formular aber welche liefert, kannst du mit folgender Funktion diese ungewollten "\n" wieder entfernen oder ersetzen:
$ul = "\\nDavid\\nKevin\\n"; echo str_replace('\\n','<br />',$ul);
Anstatt dem "<br />" kannst du einen leeren Bereich mit "" übergeben bzw. ersetzen.
Edit:
Und genau da ist schon der Fehler:
wrap="virtual"
Du solltest eigentlich schon wissen wofür die einzelnen Attribute einsetzt.
Schau dir das mal dazu an, was dein Attribut verursacht:
http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche_umbruch
Entferne das Attribut und du brauchst keine zusätzliche Bereinigung durchführen.
Edit 2:
Mir lässt das ja keine Ruhe.
Woher hast du dein Formular?
Oder anders gefragt von welcher Quelle lernst du HTML?
Dieses 'wrap="virtual"' ist beinahe so alt wie das Internet selbst und ist schon seit Ewigkeiten nicht mehr konform und auch kein Standard und war es zum Glück auch nie. Eine Textarea bricht von alleine den Text bzw. die Zeilen um, dass muss nicht noch künstlich angedroht werden.
Beitrag zuletzt geändert: 8.10.2013 1:06:49 von kgreen -
kgreen schrieb:
Edit 2:
Mir lässt das ja keine Ruhe.
Woher hast du dein Formular?
Oder anders gefragt von welcher Quelle lernst du HTML?
Dieses 'wrap="virtual"' ist beinahe so alt wie das Internet selbst und ist schon seit Ewigkeiten nicht mehr konform und auch kein Standard und war es zum Glück auch nie. Eine Textarea bricht von alleine den Text bzw. die Zeilen um, dass muss nicht noch künstlich angedroht werden.
Das Formular habe ich irgendwann mal von Selfhtml kopiert.
Ich lasse das ergebniss wieder in einer textare ausgeben. Dort wird nach der Variable ein Zeilenumbruch gemacht.
Beispiel für eingabe:
david
heinz
peter
paul
Ausgabe:
Hallo david
, wie geht es dir?
Hallo heinz
, wie geht es dir?
Hallo peter
, wie geht es dir?
Hallo paul, wie geht es dir?
Hier ist der gesamte code der Ausgabedatei:
<?php $text= $_POST["text"]; ?> <script type="text/javascript"> <!-- window.onload = function() { textareas = document.getElementsByTagName("textarea"); for(i=0; textareas[i]; i++) textareas[i].onclick = function() {this.select();}; } --> </script> <textarea readonly onclick="this.select();" name="select1" rows="4" style="width: 300px;"> <?php $array = explode("\n", trim($text)); for($x = 0; $x < count($array); $x++) { echo "Hallo ".$array[$x].", wie geht es dir? \n"; } ?> </textarea>
-
versuchs mal mit trim() .. oder chop() ... oder beides ... für jedes Element im Array
... und Vorschlag: nimm foreach() anstatt for() mit count() ....
$array = explode("\n", trim($text)); foreach($array as $item) { $item = chop($item); $item = trim($item); echo "<br> Hallo ".$item.", wie geht es dir? \n"; }
ok, chop() und trim() ist vielleicht doppelt-gemoppelt .. trim() müsste auch ausreichen.
oder ... entfernen der Steuerzeichen (Zeilenumbruch und Zeilenvorschub und Tabulator, etc.)
... $item = str_replace( array("\r","\n","\t","\s"), '', $item); ...
nochmal ... \n ist Zeilenumbruch im reinen Text, und <br> ist Zeilenumbruch als HTML,
oft wird als Zeilenumbruch auch \r\n gesetzt (unter Windows) also inkl. Zeilenvorschub
Beitrag zuletzt geändert: 8.10.2013 11:23:58 von bginfo -
Auch ich würde str_replace nutzen.
Verändertes PHP:
$array = explode("\n", trim($text)); $order = array("\r\n", "\n", "\r"); for($x = 0; $x < count($array); $x++) { $array[$x] = str_replace($order, '', $array[$x]); echo "Hallo ".$array[$x].", wie geht es dir? \n"; }
Alles in einem zusammengefasst:
<html><head><title>explode & str_replace</title> <script type="text/javascript"> <!-- window.onload = function() { textareas = document.getElementsByTagName("textarea"); for(i=0; textareas[i]; i++) textareas[i].onclick = function() {this.select();}; } --> </script> </head> <body> <?php $text= $_POST["text"]; ?> Ausgabe: <br /> <textarea readonly onclick="this.select();" name="select1" rows="4" style="width: 300px;"> <?php $array = explode("\n", trim($text)); $order = array("\r\n", "\n", "\r"); for($x = 0; $x < count($array); $x++) { $array[$x] = str_replace($order, '', $array[$x]); echo "Hallo ".$array[$x].", wie geht es dir? \n"; } ?> </textarea> <br /><br /> Eingabe: <br /> <form id="form1" name="form1" action="index.php" method="post"> <textarea name="text" rows="4" style="width: 300px;" wrap="virtual"> david heinz peter paul</textarea><br /> <input name="submit" type="submit" value="Auswerten"> </form> </body> </html>
Ausgabe:
Hallo david, wie geht es dir?
Hallo heinz, wie geht es dir?
Hallo peter, wie geht es dir?
Hallo paul, wie geht es dir?
> Beispiel <
Beitrag zuletzt geändert: 8.10.2013 19:13:20 von menschle -
Danke euch allen für die Hilfe. Funktioniert alles prima.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage