Codici escape in una textarea

Ho questo problemino.

Devo visualizzare un testo estratto da un DB in una textarea.

Il problema sono i codici escape di nuova riga \n che non vengono considerati tali, ma vengono stampati a video se creo la stringa estraendo i dati dal db, se la creao direttaemnte nel codice invece vengono trattati come codici di escape mandando a capo il testo successivo.

<?php
        $testo="$row[testo]";
   $test= "Ciao \n bello";
        echo"<textarea name=testo rows=16 cols=40>";
   echo "$testo";
   echo"$test";
   echo"</textarea><br>";
?>

Ho provato tutte le combinazioni di virgolette doppie presenti e no, ho provato a usare un trim() sulla stringa prima di stamparla a video.

In ogni caso $testo stampa gli escape di nuova linea $test gli esegue ?!?!?!

Dove sbaglio ??

 :-\

inviato 10 anni fa
Lokki
X 0 X

Quando scrivi una stringa con i doppi apici in PHP, le sequenze di escape vengono interpretate come caratteri speciali. Pertanto nella stringa non ci sono i \n ma a loro posto gli a-capo.

Se invece nel DB sono presenti i \n, questi non vengono considerati caratteri speciali (chi dovrebbe fare la conversione? Il PHP può prendersi cura solo delle stringhe create all'interno dello script!)

Pertanto se in un campo del DB ci sono i \n questi per il PHP sono 2 caratteri come gli altri.

L'errore sta nel fatto che nel DB siano presenti questi caratteri... Perchè non si sono i normali a-capo? Probabilmente la procedura di inserimento dei dati è errata.

Se comunque vuoi trasformare i \n in a-capo ti basta usare una funzioncina:

$stringa_corretta = str_replace('\n', "\n", $stringa_db);

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

La soluzione funziona  :)

Spiego perchè mi trovo a dover gestire un campo testo con inseriti direttamente i tag /n.

Il messaggio viene generato in automatico a seconda di alcune condizioni inserisco informazioni diverse nel database.

Poi per consultarlo volevo visualizzarlo nella textarea.

$testo=" E successo questo/n";

serie di condizioni

$testo=$testo."Poi è successo questo/n";

ecc ecc

SI potrebbe fare in un modo differente e più funzionale ?

risposto 10 anni fa
Lokki
X 0 X

i dati del database (quelli che contengono i \n) vengono inseriti con uno script PHP?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Si in pratica tramite crontab eseguo il file php che verifica periodicamente dei dati nel DB in base alla loro presenza o meno compone una stringa, composta da una ventina di righe che poi inserisco nel DB e alla fine voglio far leggere all'utente in modo ordinato.

risposto 10 anni fa
Lokki
X 0 X

allora probabilmente in questo script hai creato delle stringhe con apici singoli (quelle che non interpretano i caratteri di escape) in cui hai messo i \n

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ho verificato il codice, la creazione della stringa testo è tutta in virgolette doppie, anche perchè spesso inserisco dei valori presi da altre variabili.

Credo dipenda dalle librerie PEAR DB che utilizzo per accedere al db e più probabilmente dalla funzione autoinsert che probabilmente fa qualche cosa alla stringa prima di inserirla nel db.

Ad ogni miodo o risolto grazie  :)

risposto 10 anni fa
Lokki
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda