<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