Получить каждую строку из текстового поля
<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);
Но это не сработает.
Спасибо.
Ответы
Ответ 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