从textarea获取每一行
<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)从这个textarea( $text
)获取每一行,并使用foreach()
处理它们?
2)将<br />
添加到每行的结尾,除了最后一行?
3)把每一行扔到一个数组中。
重要 – textarea内的文本可以是多语言的。
试图使用:
$text = str_replace('\n', '<br />', $text);
但它不起作用。
谢谢。
你会想和trim()一起看看nl2br()函数。
nl2br()
将在换行符( \n
)前面插入<br />
, trim()
将删除任何结尾的\n
或空格字符。
$text = trim($_POST['textareaname']); // remove the last \n or whitespace character $text = nl2br($text); // insert <br /> before \n
这应该做你想要的。
UPDATE
下面的代码将不起作用的原因是因为为了\n
被识别,它需要在双引号内,因为双引号parsing其中的数据,其中单引号从字面上看,IE "\n"
$text = str_replace('\n', '<br />', $text);
要解决它,这将是:
$text = str_replace("\n", '<br />', $text);
但是使用PHP提供的内置nl2br()
函数还是更好。
编辑
对不起,我想第一个问题是你可以添加换行符,实际上这会改变相当多的答案,因为任何types的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()
closures任何额外的\r
字符,可能已经挥之不去。
你可以使用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 DOMparsing并添加它。 喜欢这个:
$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/>"); }
(确保用另一个花括号closuresif
块)
}
对于每行的<br>
,请使用
<textarea wrap="physical"></textarea>
你将得到textarea的值。 然后,使用nl2br()
函数创build<br>
s,或者您可以为(或) \n
nl2br()
)它。
希望这可以帮助
$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