2010-09-13 6 views
43
<textarea> put returns between paragraphs 
for linebreak add 2 spaces at end 
indent code by 4 spaces 
quote by placing > at start of line 
</textarea> 

$text = value from this textarea; 

Gewusst wie:Erhalten Sie jede Zeile von Textarea

1) Holen Sie jede Zeile von diesem Textfeld ($text) und arbeiten mit ihnen foreach() mit?

2) Hinzufügen <br /> an das Ende jeder Zeile, mit Ausnahme der letzten?

3) Jede Zeile in ein Array werfen.

Wichtig - Text in Textarea kann mehrsprachig sein.


Haben Sie versucht zu verwenden:

$text = str_replace('\n', '<br />', $text); 

Aber es funktioniert nicht.


Danke.

+0

möglich Duplikat [How Zeilenumbrüche (keine Zeichen!) aus der Zeichenfolge entfernen?] (http://stackoverflow.com/questions/10757671/how-to-remove-line-breaks-no-characters-from-the-string) – kenorb

Antwort

90

Sie werden zusammen mit dem trim() in die nl2br() Funktion zu suchen.

Die nl2br() wird <br /> vor dem Zeilenende-Zeichen (\n) einzufügen und die trim() wird alle endend \n oder Leerzeichen entfernen.

$text = trim($_POST['textareaname']); // remove the last \n or whitespace character 
$text = nl2br($text); // insert <br /> before \n 

Das sollte tun, was Sie wollen.

UPDATE

Der Grund der folgende Code wird nicht funktionieren, weil damit \n anerkannt werden, es in doppelten Anführungszeichen sein muss, da doppelte Anführungszeichen in sie Daten zu analysieren, wo als einfache Anführungszeichen nehmen es wörtlich, IE "\n"

$text = str_replace('\n', '<br />', $text); 

es zu beheben, wäre es:

$text = str_replace("\n", '<br />', $text); 

Aber es ist immer noch besser, die integrierte nl2br()-Funktion zu verwenden, die PHP bietet.

EDIT

Sorry, dachte ich, die erste Frage war, so konnte man die Zeilenumbrüche in, fügen Sie in der Tat wird dies die Antwort ziemlich viel ändern, da anytype von explode() werden die Zeilenumbrüche entfernen, aber hier ist:

$text = trim($_POST['textareaname']); 
$textAr = explode("\n", $text); 
$textAr = array_filter($textAr, 'trim'); // remove any extra \r characters left behind 

foreach ($textAr as $line) { 
    // processing here. 
} 

Wenn Sie es auf diese Weise tun, müssen Sie die <br /> auf das Ende der Zeile vor der Verarbeitung auf eigene Faust getan wird anhängen, da die explode() Funktion die \n Zeichen entfernen.

Hinzugefügt array_filter() zu trim() von zusätzlichen \r Zeichen, die möglicherweise verweilten.

+0

Was ist mit der ersten Frage? – James

+0

Der obige Code geht davon aus, dass Sie die Daten aus dem Textfeld mithilfe eines von Ihnen eingerichteten Formulars abrufen. Wenn Sie die HTML-Daten haben und dies analysieren möchten, lesen Sie die Antwort von shamittomar. –

+0

Warum doppelte Anführungszeichen, was ist die Magie? – James

3

Für ein <br> in jeder Zeile, verwenden

<textarea wrap="physical"></textarea> 

Sie \n s in dem Wert des Textbereiches erhalten. Dann verwenden Sie die nl2br() Funktion, um <br> s zu erstellen, oder Sie können es für <br> oder \n explodieren.

this helps

+0

danke für das ist neu für mich. – James

2
$array = explode("\n", $text); 
for($i=0; $i < count($array); $i++) 
{ 
    echo $line; 
    if($i < count($array)-1) 
    { 
     echo '<br />'; 
    } 
} 
4

Verwenden Sie PHP-DOM zum parsen und fügen Sie <br/> darin hinzu. Wie folgt aus:

$html = '<textarea> put returns between paragraphs 
for linebreak add 2 spaces at end 
indent code by 4 spaces 
quote by placing > at start of line 
</textarea>'; 

//parsing begins here: 
$doc = new DOMDocument(); 
@$doc->loadHTML($html); 
$nodes = $doc->getElementsByTagName('textarea'); 

//get text and add <br/> then remove last <br/> 
$lines = $nodes->item(0)->nodeValue; 

//split it by newlines 
$lines = explode("\n", $lines); 

//add <br/> at end of each line 
foreach($lines as $line) 
    $output .= $line . "<br/>"; 

//remove last <br/> 
$output = rtrim($output, "<br/>"); 

//display it 
var_dump($output); 

Diese Ausgänge:

$array = explode(PHP_EOL, $text); 

zusätzliche Hinweise:
1. Für mich ist dies die einfachste und

string ' put returns between paragraphs 
<br/>for linebreak add 2 spaces at end 
<br/>indent code by 4 spaces 
<br/>quote by placing > at start of line 
' (length=141) 
+0

+1, da er HTML analysieren möchte, und wenn dies der Fall ist, ist dies ein besserer Weg. Aber nicht sicher, ob das seine Absichten sind. –

+0

danke Mann, gute Lösung für das Parsing. – James

+0

Ich analysiere meinen eigenen Textbereich von $ _POST – James

2
$content = $_POST['content_name']; 
$lines = explode("\n", $content); 

foreach($lines as $index => $line) 
{ 
    $lines[$index] = $line . '<br/>'; 
} 

// $lines contains your lines 
+0

danke Robert, kannst du diesen Teil des Codes "$ index => $ line" erklären? – James

+1

foreach ($ -Zeilen als $ index => $ -Zeile) == "Iterieren Sie für jedes Element von $ -Zeilen mit $ index mit dem Schlüssel/index und $ -Zeile mit dem Wert" http://fr.php.net/manual /de/control-structures.foreach.php ... (Eigentlich ist mein Vorname Vincent ^^) –

+0

Entschuldigung Vincent, danke für den Kommentar. – James

32

Sie PHP-Konstante verwenden könnte der sicherste Weg, weil es plattformübergreifend kompatibel ist (Windows/Linux etc.)
2. Es ist besser, PHP KONSTANTE zu verwenden, wann immer Sie können für eine schnellere Ausführung

+0

Einfach und direkt! Danke – wiLLiamcastrO

+0

es ist wirklich die einfache Art. GROSS –

3

Es funktioniert für mich:

if (isset($_POST['MyTextAreaName'])){ 
    $array=explode("\r\n", $_POST['MyTextAreaName']); 

jetzt, meine $ array alle haben die Linien I

for ($i = 0; $i <= count($array); $i++) 
    { 
     echo (trim($array[$i]) . "<br/>"); 
    } 
brauchen

(stellen Sie sicher, dass der if Block mit einer anderen geschweifte Klammer schließen)

} 
+0

perfekt! danke –

8

Altes Profil ...? Nun, jemand kann in diese Beule ...

Bitte beachten Sie auch http://telamenta.com/techarticle/php-explode-newlines-and-you

Anstatt mit:

$values = explode("\n", $value_string); 

Verwenden Sie eine sicherere Methode wie:

$values = preg_split('/[\n\r]+/', $value_string); 
+0

Guter Punkt. [Shah Erhan] (http://Stackoverflow.com/a/7870846/4012426) schlug vor, 'PHP_EOL' zu verwenden, aber ich weiß nicht, ob die von Browsern gesendeten Zeilenende-Zeichen immer mit dem Ende der Zeile übereinstimmen. Zeilenzeichen auf dem Server. Ihre Verbindung ist übrigens schrecklich kaputt. –