29 votos

Obtener de cada línea de 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;

Cómo:

1) Obtener de cada línea de este textarea ($text) y trabajar con ellos usando foreach()?

2) Agregar <br /> al final de cada línea, excepto la última?

3) Tirar de cada línea a una matriz.

Importante - texto dentro de un área de texto puede ser multilenguaje.


Han tratado de usar:

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

Pero no funciona.


Gracias.

65voto

Brad F Jacobs Puntos 12725

Usted tendrá que buscar en el nl2br() la función junto con el trim(). El nl2br() reemplazará el carácter de nueva línea (\n) con <br /> y trim() eliminará cualquier terminando \n o caracteres de espacio en blanco.

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

Que debe hacer lo que quiera.

ACTUALIZACIÓN

La razón, el siguiente código no va a funcionar es porque para \n a ser reconocido, debe ser dentro de las comillas dobles ya que las comillas dobles analizar los datos dentro de ellos, en donde, como comillas simples toma literalmente, es decir, "\n"

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

Para solucionarlo, sería:

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

Pero todavía es mejor utilizar builtin nl2br() función, PHP proporciona.

EDITAR

Lo siento, pensé que la primera pregunta fue así que usted podría agregar la puedes incluir varias líneas en el, de hecho esto va a cambiar la respuesta, bastante, un poco, como anytype de explode() va a quitar los saltos de línea, pero aquí está:

$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. 
} 

Si lo haces de esta manera, usted tendrá que añadir el <br /> sobre el extremo de la línea antes de que el procesamiento se lleva a cabo por su propia cuenta, como la explode() función de quitar el \n personajes.

Añadido el array_filter() a trim() de descuento en cualquier extra \r personajes, que han sido persistentes.

23voto

Shah Erhan Puntos 128

Usted podría utilizar la constante de PHP:

$array = explode(PHP_EOL, $text);

3voto

Fincha Puntos 983

para
en cada línea, sólo tiene que escribir <textarea wrap="physical"></textarea>, usted obtendrá "\n", a continuación, utilizar la nl2br() función para crear


o puede, obtener el valor de textarea y explode ()"
"o "\n"

La esperanza puede ayuda

3voto

shamittomar Puntos 20136

Uso de PHP DOM para analizar y agregar <br/> . Como este:

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

Esta salida:

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)

2voto

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: