从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