Подтвердить что ты не робот

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

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

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


Спасибо.

4b9b3361

Ответ 1

Вам нужно посмотреть nl2br() вместе с подрезать().

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

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

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

UPDATE

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

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

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

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

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

ИЗМЕНИТЬ

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

Ответ 2

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

$array = explode(PHP_EOL, $text);

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

Ответ 3

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

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

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

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

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

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

Ответ 4

Используйте 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)

Ответ 5

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

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

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

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

Ответ 6

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

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

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

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

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

}

Ответ 7

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

Ответ 8

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

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

// $lines contains your lines