Получить каждую строку из textarea - PullRequest
45 голосов
/ 13 сентября 2010
<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) Бросить каждую строку в массив.

Важно - текст внутри текстовой области может быть мультиязычным.


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

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

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


Спасибо.

Ответы [ 8 ]

95 голосов
/ 13 сентября 2010

Вы захотите изучить функцию 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 предоставляет.

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

Извините, я подумал, что первый вопрос был таким, чтобы вы могли добавить разрывы строк, действительно, это немного изменит ответ, как и любой тип 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() для любых дополнительных \r символов, которые могли задерживаться.

38 голосов
/ 24 октября 2011

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

$array = explode(PHP_EOL, $text);

дополнительные примечания:1. Для меня это самый простой и безопасный способ, потому что он кросс-платформенный (Windows / Linux и т.д.)2. Лучше использовать PHP CONSTANT, когда это возможно, для более быстрого выполнения

8 голосов
/ 31 января 2013

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

Пожалуйста, проверьте http://telamenta.com/techarticle/php-explode-newlines-and-you

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

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

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

$values = preg_split('/[\n\r]+/', $value_string);
4 голосов
/ 14 ноября 2011

Это работает для меня:

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

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

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

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

}
4 голосов
/ 13 сентября 2010

Используйте 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)
3 голосов
/ 13 сентября 2010
$content = $_POST['content_name'];
$lines = explode("\n", $content);

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

// $lines contains your lines
3 голосов
/ 13 сентября 2010

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

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

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

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

2 голосов
/ 13 сентября 2010
$array = explode("\n", $text);
for($i=0; $i < count($array); $i++)
{
    echo $line;
    if($i < count($array)-1)
    {
         echo '<br />';
    }
}
...