Newsgroup: it.comp.www.php
Titolo: htmlentities() e stripslashes() nei FORM... sto diventando matto!

Ciao a tutti!
Sono abbastanza nuovo nel mondo di PHP.
Sto diventando matto con la gestione dei FORM e del loro output, tra
htmlentities() e stripslashes() non ci sto capendo più nulla.
Vi spiego nel dettaglio la situazione.
Sto cercando di creare un'applicazione di inventario, i problemi li sto
incontrando mentre sto realizzando la pagina per modificare un
articolo.
Se seleziono un oggetto da modificare l'utente viene portato alla
pagina "modifica_articolo.php?art_id=x", questa pagina mostra un form
con i vari campi da modificare.
Alla fine del form sono presenti tre pulsanti: "Modifica ora",
"Anteprima" e "Annulla".
Il form conduce alla pagina "modifica_articolo2.php" con metodo POST.
Nella pagina "modifica_articolo2.php" definisco in principio le
variabili per estrapolarle da $_POST (ad esempio $art_id =
$_POST['art_id'], $art_descrizione = $_POST['art_descrizione'], etc).
In seguito è presente un ciclo switch composto da 3 casi, uno per
l'anteprima, uno per annullare e uno per modificare.
Prima del ciclo switch ho creato una variabile del tipo .=<<<TAB [...]
TAB; dove è presente il codice per creare la tabella che mostra
l'anteprima delle modifiche. Questa variabile la vado a richiamare nel
ciclo switch se viene selezionato anteprima.
Ora iniziano i problemi. Man mano che vado avanti nel FORM (ad esempio
cliccando prima ANTEPRIMA e poi MODIFICA) se vado a fare un
print_r($_POST) ottengo non solo i classici slashes prima delle
virgolette (\") ma dopo il 3° clic ad esempio ottengo addirittura un
\\\" per le virgolette, e se c'è una lettera accentatà si interrompe
la frase (ad esempio "L\\'articolo è" invece che "L'articolo è in
ottime condizioni").
Ho provato in tutti i modi, se nella pagina "modifica_articolo2.php"
vado ad utilizzare htmlentities($art_descrizione) ottengo che tutte le
lettere accentate vengono visualizzate come A accentate, se uso
stripslashes invece che \\\" ottengo \", insomma, sono arrivato al
punto che non ci sto capendo più niente...
Spero soltanto che qualcuno abbia avuto la pazienza di leggere quanto
ho scritto, accetto volentieri qualsiasi consiglio. Mi piacerebbe
sapere anche se concettualmente questa pagina che sto creando è una
buona soluzione o conviene adottarne altre...

 punto che non ci sto capendo più niente...
Ho provato con una pagina di prova e non si verifica il tuo problema.
Io uso php 4.3.10. Comunque ricordo che le versioni precedenti aggiungevano
gli slash agli apici, ai doppi apici e agli slash stessi. Tuttavia, se ben 
ricordo, la
funzione stripslashes elimina i doppi slash dai commenti in stile C.
La funzione htmlentities non ti risolve il problema e le A accentate sono 
quasi
sicuramente dovute alla codifica (probabilmente usi utf-8).
Attualmente non so darti una soluzione precisa. Qualcuno più
esperto saprà aiutarti meglio. 

 sicuramente dovute alla codifica (probabilmente usi utf-8).
Io uso Php 5 e la funzione Magic Quotes è attivata... sto pensando di
fare in modo che gli slash davanti agli apici vengano messi o meno a
seconda se nel server che hosta il sito Magic Quotes sia attivato o
meno.
Il problema si verifica per nella seconda pagina (quella di anteprima)
ho inserito degli INPUT di tipo HIDDEN dove vengono passati i dati
delle variabili _POST, questo perchè dopo l'anteprima l'utente potrà
cliccare sul bottone in fondo MODIFICA che richiama sempre la stessa
pagina. A questo punto se nel campo dell'input hidden VALUE compare
un'apice o una virgoletta il campo si interrompe. Se uso htmlentities
per trasformare gli apici e i quotes in codice html ottengo quelle
lettere accentate...(ho notato che questo si verifica quando si fa a
fare htmlentities su un output già passato da htmlentities...)

 fare htmlentities su un output già passato da htmlentities...)
A questo punto ti direi di usare la funzione get_magic_quotes_gpc() per 
vedere se i magic quotes sono attivi:
- se sono attivi inserisci la stringa normalmente nell'attributo value dei 
campi hidden
- altrimenti usa addslashes per aggiungere gli slash

ottime condizioni").
poco tempo fa ho avuto casini anche io con quei maledetti apici. in locale 
funzionava tutto ma sul server mi aggiungeva ogni volta una barra.  tutto 
xche' da una parte avevo i magic quote attivato ed in local no.
il tuo problema penso sia dato dal fatto che tu usi sempre un add_slashes, 
quindi ad ogni post  ti aggiunge uno slash,
potresti usare queste due funzioncine:
function undo_magic_quotes( )
{
   if ( get_magic_quotes_gpc( ) )
   {
       $_GET = array_map_recursive('stripslashes', $_GET) ;
       $_POST = array_map_recursive('stripslashes', $_POST) ;
       $_COOKIE = array_map_recursive('stripslashes', $_COOKIE) ;
       $_REQUEST = array_map_recursive('stripslashes', $_REQUEST) ;
   }
}
function array_map_recursive($function, $data)
{
   foreach ( $data as $i => $item )
       $data[$i] = is_array($item)? array_map_recursive($function, 
$item):$function($item) ;
   return $data ;
}
all'inizio degli script, chiami  undo_magic_quotes( )  e ti elimina gli 
slash.