Получить каждую строку из текстового поля

<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; 

Как:

1) Получите каждую строку из этого текстового поля ( $text ) и работайте с ними с помощью foreach() ?

2) Добавить <br /> в конец каждой строки, кроме последней?

3) Бросьте каждую строку в массив.

Важно – текст внутри textarea может быть многоязычным.


Попытались использовать:

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

Но это не сработает.


Благодарю.

Вам нужно будет заглянуть в функцию nl2br () вместе с trim () .

nl2br() будет вставлять <br /> перед символом новой строки ( \n ), а trim() удалит любые конечные \n или пробельные символы.

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

Это должно делать то, что вы хотите.

ОБНОВИТЬ

Причина, по которой следующий код не будет работать, заключается в том, что для того, чтобы \n было распознано, оно должно быть внутри двойных кавычек, поскольку данные двойного кавычек анализируют внутри них, где, когда одинарные кавычки берут его буквально, IE "\n"

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

Чтобы исправить это, это будет:

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

Но лучше использовать встроенную nl2br() , предоставляемую PHP.

РЕДАКТИРОВАТЬ

Извините, я решил, что первый вопрос состоял в том, чтобы вы могли добавить разрывы строк, действительно, это изменит ответ совсем немного, так как anytype of explode() удалит разрывы строк, но вот он:

 $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. } 

Если вы сделаете это так, вам нужно будет добавить <br /> в конец строки до того, как обработка будет выполнена сама по себе, так как функция explode() удалит символы \n .

Добавлен array_filter() чтобы trim() от любых лишних символов, которые могли быть затянуты.

Вы можете использовать постоянную PHP:

 $array = explode(PHP_EOL, $text); 

Старый протектор …? Ну, кто-то может столкнуться с этим …

Пожалуйста, ознакомьтесь с http://telamenta.com/techarticle/php-explode-newlines-and-you

Вместо использования:

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

Используйте более безопасный метод, например:

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

Используйте PHP DOM для анализа и добавления <br/> в него. Как это:

 $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); 

Эти результаты:

 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) 

Меня устраивает:

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

теперь мой массив $ будет иметь все строки, которые мне нужны

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

(обязательно закройте блок if другой фигурной скобкой)

 } 

Для <br> в каждой строке используйте

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

Вы получите \n s в значении textarea. Затем используйте nl2br() для создания s, или вы можете взорвать () ее для <br> или \n .

Надеюсь это поможет

 $array = explode("\n", $text); for($i=0; $i < count($array); $i++) { echo $line; if($i < count($array)-1) { echo '<br />'; } } 
 $content = $_POST['content_name']; $lines = explode("\n", $content); foreach( $lines as $index => $line ) { $lines[$index] = $line . '<br/>'; } // $lines contains your lines