Domanda

Ho un sistema impostato per gli utenti a presentare i propri articoli nel mio database. Dato che sarà solo HTML, non voglio aspettarmi che lo sappiano per digitare <br /> ogni volta che c'è una nuova linea, quindi sto usando la funzione PHP nl2br() sull'ingresso.

Sto anche fornendo uno strumento di modifica dell'articolo, che porterà i loro articoli nel modulo (questa è una pagina diversa, tuttavia) e consente loro di modificarla. Nel fare ciò, anche gli elementi generacodictagcode erano anche (con le nuove linee ancora). Per rimediare agli elementi
che appaiono (che mi aspettavo, comunque) ho aggiunto <br /> che avevo trovato in un'altra domanda su questo sito. Fa il compito di rimuovere gli elementi preg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content")), ma poiché lo sostituisce con le nuove linee, e le nuove linee sarebbero rimaste originariamente comunque, ogni volta che il post è modificato, verrà aggiunto sempre più appena elencati, spaziando i paragrafi sempre più ogni volta. Questo è qualcosa che un utente non capirà.

Ad esempio, dì che inserisco quanto segue nel modulo di presentazione dell'articolo:

 Hello, this is my article.
 I am demonstrating a new line here.
.

Questo convertirà in:

Hello, this is my article.<br />
I am demonstrating a new line here.
.

Si noti che, anche se il personaggio della nuova linea è stato convertito, c'è ancora una nuova linea nel testo. Nel modulo di modifica, il <br /> verrà convertito in Newline e assomigliato a questo:

Hello, this is my article.

I am demonstrating a new line here.
.

Poiché il <br /> è stato convertito in una nuova linea, ma c'era già una nuova linea. Quindi immagino cosa mi aspetto sia che sia originariamente convertito in qualcosa del genere:

Hello, this is my article.<br />I am demonstrating a new line here.
.

Mi chiedo ... C'è un modo per interrompere la funzione <br /> dal mantenimento delle nuove linee originali? Potrebbe fare con il carattere di Windows nl2br()?

È stato utile?

Soluzione

La funzione che stai utilizzando, nl2br viene utilizzato per inserirli, ma non sostituirli.Se si desidera sostituire \n con <br /> è necessario solo utilizzare str_replace.Come così:

$string = str_replace("\n","<br />",$string);
.

Non c'è assolutamente bisogno di regex in questa situazione.

Altri suggerimenti

Sembra che il problema che hai descritto non sia un bug, ma una caratteristica di BL2BR.Potresti semplicemente scrivere la tua funzione per questo, come:

<?php
function NlToBr($inString)
{
    return preg_replace("%\n%", "<br>", $inString);
}
?>
.

Ho trovato questo nei commenti della documentazione della funzione NL2BR nel manuale PHP: http://php.net/manual/de/function.nl2br.php .Se quello che ho postato non ha funzionato per te, dovrebbe esserci molto altro dove è venuto da.

(o semplicemente usare la funzione dall'altra risposta che è stata appena pubblicata, immagino che anche questo dovrebbe funzionare)

Questo dovrebbe risolverlo:

preg_replace('/<br(\s+)?\/?>(?!\s*\n)/i', "\n", mysql_result($result,$i,"content"))
.

Non puoi semplicemente rimuovere le pause, perché potrebbero essere sulla stessa riga.Questo regex sostituirà tutte le pause con Newline ma non quelle che sono seguite dalla nuova linea.

Lascerà il <br>\n nel testo.Aggiuntivo Regex ti libererà di loro:

preg_replace('/<br(\s+)?\/?>/i', "", $res)
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top