Ritorno a capo

marco_rx

Utente Attivo
19 Dic 2010
129
0
0
Come potrei individuare in una textarea i caratteri di doppio ritorno a capo e sostituirli con </p><p> ?
Perchè per l'interruzione di linea "singola" ho usato str_replace passando come argomenti \n e <br /> (o comunque potrei usare nl2br) ma vorrei riuscire a sostituire anche 2 o più ritorni a capo con dei paragrafi che sono più corretti.
Ha un nome questo doppio a capo? (ho provato con \n\n ma niente)
 
Usa questa funzione:
PHP:
function nl2p($var)
{
    $var = "<p>{$var}</p>";
    $var = str_replace("\n", '</p><p>', $var);

    return $var;
}
Esempio:
PHP:
$text = <<<EOF
Questo testo verrà diviso in più paragrafi.
Questo è il primo paragrafo del testo.
Questo è il secondo paragrafo del testo.
EOF;

// <p>Questo testo verrà diviso in più paragrafi.</p>
// <p>Questo è il primo paragrafo.</p>
// <p>Questo è il secondo paragrafo.</p>
echo nl2p($text);
Dovevi fare questo?
 
I ritorni a capo singoli son già riuscito a farli, quello che vorrei fare è sostituire due ritorni a capo con </p><p>.
Ad esempio in una textarea se premo una volta invio sostituisco il \n con <br /> (e fin qui ci siamo) ma se premo due volte invio vorrei che al posto di due <br /> mi visualizzasse </p><p>.
Non so come spiegarmi, in pratica per tutti i \n superiori a uno vorrei venisse mostrato il paragrafo.
 
Non è che per caso fai prima la sostituzione di "\n" con "<br/>" e poi tenti l'altra sostituzione?
 
Modifica la funzione così:
PHP:
function nl2p($var) 
{ 
    $var = "<p>{$var}</p>"; 
    $var = str_replace("\n\n", '</p><p>', $var); 

    $var = nl2br($var);

    return $var; 
}
Questa "versione" sostituirà due ritorni a capo con un paragrafo e un ritorno a capo con un <br />.
 
Avevo già provato questa soluzione ma non funziona, i \n vengono sempre sostituiti con <br /> indipendentemente dal numero
 
Questo accade perché usi prima la funzione nl2br e solo dopo sostituisci due ritorni a capo con un nuovo paragrafo. Ho provato la funzione in locale e funziona perfettamente:
PHP:
<?php
function nl2p($var)
{
    $var = "<p>{$var}</p>";
    $var = str_replace("\n\n", '</p><p>', $var);

    $var = nl2br($var);

    return $var;
}

$text = <<<EOF
Questo testo verrà diviso in più paragrafi.

Questo è il primo paragrafo del testo.

Questo è il secondo paragrafo del testo.
Questa è semplicemente una nuova linea.
EOF;

// <p>Questo testo verrà  diviso in più paragrafi.</p>
// <p>Questo è il primo paragrafo del testo.</p>
// <p>Questo è il secondo paragrafo del testo.<br /> 
// Questa è semplicemente una nuova linea.</p>
echo nl2p($text);
?>
 
No nl2br l'ho messo dopo e ho anche provato a toglierlo ma continua a inserire solo <br /> (in caso ci sia nl2br) e a non formattare il testo in caso non sia presente nl2br.
Non riesco a capire il motivo

EDIT: provando su un server web funziona, può dipendere dal fatto che in locale ho windows?
 
Ultima modifica:
Quindi quale potrebbe essere il problema? non riesco a capirlo in nessun modo, il codice è giusto perchè su web funziona ma come mai in locale no?
 

Discussioni simili