web-dev-qa-db-fra.com

Obtenez 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 eux en utilisant foreach()?

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

) Jetez chaque ligne dans un tableau.

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


J'ai essayé d'utiliser:

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

Mais ça ne marche pas.


Merci.

45
James

Vous voudrez examiner la fonction nl2br () ainsi que trim () .

La nl2br() insérera <br /> Avant le caractère de nouvelle ligne (\n) Et la trim() supprimera toute 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 car les guillemets doubles analysent les données à l'intérieur d'eux, alors que les guillemets simples le prennent littéralement, IE "\n"

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

Pour y remédier, ce serait:

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

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

[~ # ~] modifier [~ # ~]

Désolé, je pensais que la première question était pour que vous puissiez ajouter les sauts de ligne, en effet cela changera un peu la réponse, car tout type de explode() supprimera les sauts de ligne, mais C'est ici:

$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 se fasse par vous-même, car la fonction explode() supprimera le \n Caractères.

Ajout de array_filter() à trim() de tous les caractères \r Supplémentaires qui peuvent avoir persisté.

96
Brad F Jacobs

Vous pouvez utiliser PHP constant:

$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 multiplateforme (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

39
Shah Erhan

Vieille bande de roulement ...? Eh bien, quelqu'un peut se heurter à cela ...

Veuillez vérifier http://telamenta.com/techarticle/php-explode-newlines-and-yo

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
Temitope

Ça marche pour moi:

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

maintenant, mon $ array 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)

}
4
profimedica

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

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

Cela produit:

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
shamittomar

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 la fonction nl2br() pour créer <br>, Ou vous pouvez l'exploser () pour <br> Ou \n.

J'espère que cela t'aides

3
$content = $_POST['content_name'];
$lines = explode("\n", $content);

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

// $lines contains your lines
3
Vincent Robert
$array = explode("\n", $text);
for($i=0; $i < count($array); $i++)
{
    echo $line;
    if($i < count($array)-1)
    {
         echo '<br />';
    }
}
2
cichy