Chaque ligne 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;

Comment:

1) Obtenez chaque ligne de cette zone de texte ($text) et travaillez avec elles en utilisant foreach()?

2) Ajouter <br /> à la fin de chaque ligne, sauf la dernière?

3) Lancez chaque ligne dans un tableau.

Important - le texte à l'intérieur de textarea peut être multilingue.


Ont essayé d'utiliser:

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

Mais ça ne marche pas.


Merci.

44
demandé sur James 2010-09-13 20:29:56

8 réponses

Vous voudrez regarder dans la fonction nl2br() avec la fonction trim () .

Le nl2br() insérera <br /> avant le caractère de nouvelle ligne (\n) et le trim() supprimera les caractères de fin \n ou les espaces.

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

Cela devrait faire ce que vous voulez.

Mise à JOUR

La raison pour laquelle le code suivant ne fonctionnera pas est que pour que \n soit reconnu, il doit être entre guillemets doubles puisque les guillemets doubles analyser les données à l'intérieur d'eux, où les guillemets simples le prennent littéralement, C'est-à-dire "\n"

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

Pour le réparer, ce serait:

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

Mais il est toujours préférable d'utiliser la fonction intégrée nl2br(), PHP fournit.

Modifier

Désolé, j'ai pensé que la première question était pour que vous puissiez ajouter les sauts de ligne, en effet cela va changer la réponse un peu, comme anytype de explode() supprimera les sauts de ligne, mais le voici:

$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 vous le faites de cette façon, vous devrez ajouter le <br /> à la fin de la ligne avant que le traitement ne soit effectué seul, car la fonction explode() supprimera les caractères \n.

Ajouté le array_filter() pour trim() désactiver tous les caractères \r supplémentaires qui peuvent avoir été persistants.

93
répondu Brad F Jacobs 2015-03-03 00:09:36

Vous pouvez utiliser la constante PHP:

$array = explode(PHP_EOL, $text);

Notes complémentaires:
1. Pour moi, c'est le moyen le plus simple et le plus sûr car il est compatible multi-plateforme (Windows / Linux, etc.)
2. Il est préférable d'utiliser PHP CONSTANT chaque fois que vous le pouvez pour une exécution plus rapide

35
répondu Shah Erhan 2017-12-27 12:55:28

Vieille bande de roulement...? Eh bien, quelqu'un peut cogner dans cette...

S'il vous Plaît vérifier http://telamenta.com/techarticle/php-explode-newlines-and-you

Plutôt que d'utiliser:

$values = explode("\n", $value_string);

Utilisez une méthode plus sûre comme:

$values = preg_split('/[\n\r]+/', $value_string);
8
répondu Temitope 2013-01-31 15:55:38

Utilisez PHP DOM pour analyser et ajouter <br/> dedans. Comme ceci:

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

Cette sortie:

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)
4
répondu shamittomar 2010-09-13 16:45:17

Cela fonctionne pour moi:

if (isset($_POST['MyTextAreaName'])){
    $array=explode( "\r\n", $_POST['MyTextAreaName'] );

Maintenant, mon tableau $aura toutes les lignes dont j'ai besoin

    for ($i = 0; $i <= count($array); $i++) 
    {
        echo (trim($array[$i]) . "<br/>");
    }

(Assurez-vous de fermer le bloc if avec une autre Accolade)

}
3
répondu profimedica 2016-06-08 22:26:56

Pour un <br> sur chaque ligne, utilisez

<textarea wrap="physical"></textarea>

Vous obtiendrez \n s dans la valeur de la zone de texte. Ensuite, utilisez nl2br() la fonction à créer <br>s, ou vous pouvez explode() pour <br> ou \n.

J'espère que cela aide

3
répondu Fribu - Smart Solutions 2016-06-09 17:34:04
$array = explode("\n", $text);
for($i=0; $i < count($array); $i++)
{
    echo $line;
    if($i < count($array)-1)
    {
         echo '<br />';
    }
}
2
répondu cichy 2010-09-13 16:39:56
$content = $_POST['content_name'];
$lines = explode("\n", $content);

foreach( $lines as $index => $line )
{
    $lines[$index] = $line . '<br/>';
}

// $lines contains your lines
2
répondu Vincent Robert 2010-09-13 16:44:27