Catturare i caratteri di interruzione di riga (newline, linefeed) in un'area di testo
-
08-07-2019 - |
Domanda
Ho un modulo con un <textarea>
e voglio catturare qualsiasi interruzione di riga in quella textarea sul lato server e sostituirli con un <br/>
.
È possibile?
Ho provato a impostare white-space:pre
sul CSS del textarea
, ma non è ancora abbastanza.
Soluzione
Dai un'occhiata alla nl2br()
. Dovrebbe fare esattamente quello che vuoi.
Altri suggerimenti
La nl2br()
esiste proprio per fare esattamente questo:
Tuttavia, questa funzione aggiunge tag br ma in realtà non rimuove le nuove righe - questo di solito non è un problema, ma se vuoi spogliarle completamente e catturare anche i ritorni a capo, dovresti usare un str_replace
o preg_replace
Penso che str_replace sia leggermente più veloce ma non ho fatto un benchmark;
$val = str_replace( array("\n","\r","\r\n"), '<br />', $val );
o
$val = preg_replace( "#\n|\r|\r\n#", '<br />', $val );
Se utilizzerai str_replace
o preg_replace
, probabilmente dovresti posizionare "\r\n"
all'inizio dell'array, altrimenti una sequenza \r\n
verrà tradotta in due tag <br/>
(poiché \r
verrà abbinato, quindi \n
verrà abbinato).
es:
$val = str_replace( array("\r\n", "\n","\r"), '<br />', $val );
o
$val = preg_replace( "#\r\n|\n|\r#", '<br />', $val );
Per coloro che desiderano una risposta che non si basa su nl2br()
:
$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);
o (in questo caso):
$newList = ereg_replace( "\n",'<br/>', $_POST['theTextareaContents']);
Lato PHP: dalla stringa Textarea alla stringa PHP
$list = str_replace('|', ' ', $r['db_field_name']);
Lato PHP: stringa PHP torna alla stringa TextArea:
<*>