htmlentities()

Salve a tutti.

Ho una textarea all'interno di un form. Nel contenuto di questa c'è la possibilità di trovarci " o '.

Se l'operazione va a buon fine, non ci sono problemi.

Se qualche campo non è stato compilato, viene richiamata la medesima pagina, con i testi precedentemente messi (ovvero senza perdere ciò che prima andava bene).

Il problema è che i caratteri " e ' mi ritornano \\\" e \\\'. Ho provato ad utilizzare la funzione htmlentities(), sia nella pagina di visualizzazione, sia nella pagina di pura elaborazione che in entrambe.

Vi illustro un po' di codice:

Pagina "lato client":

<?php
    echo htmlentities($_GET['descrizione'], ENT_QUOTES);
?>

Pagina "lato server":

<?php
    $r[2] = htmlentities($r[2], ENT_QUOTES);
?>

Non mi riesce venirne a capo. potrei adottare una via alternativa giocando con str_replace, ma non vedo perché non dovrebbe funzionare tale funzione "dedicata".

Grazie in anticipo!

inviato 6 anni fa
Schiappa
X 0 X

nel php.ini la direttiva "magic_quotes_gpc" è attiva?

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Io questa direttiva non la vedo neanche elencata nella tabella...

risposto 6 anni fa
Schiappa
X 0 X

No scusa.... è attiva!

risposto 6 anni fa
Schiappa
X 0 X

disattivala e vedi se ci sono miglioramenti

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Penso che il file sia situato nella cartella /conf, alla quale non posso accedere...

Nel caso dovessi chiedere al provider di settarmi il file, per non effettuare troppe richieste(perdita di tempo prezioso), questa è l'unica richiesta che dovrei fargli? Questa direttiva deve essere settata su off di normale?

risposto 6 anni fa
Schiappa
X 0 X

in alternativa per disattivare il magic_quotes_gpc puoi mettere nel file .htaccess questa direttiva:

php_flag magic_quotes_gpc on

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Ok. ho settato la direttiva. Comunque, prima di cambiarla, ho visto che applicando htmlentities alla variabile nella pagina di recupero dati ("lato server") scrivendo " stampa \\" invece di \\\". Comunque ora è a off e il risultato è rimasto invariato...

 

risposto 6 anni fa
Schiappa
X 0 X

verifica con un phpinfo() se realmente la direttiva è a off.

Comunque l'istruzione htmlentities (o htmlspecialchars) va usata sulle stringhe solo prima di mostrarle in una pagina HTML, mentre prima di utilizzarle nello statement devi usare mysql_real_escape_string

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Ho già verificato il settaggio: la direttiva è a off!

Mi potresti fare un esempio pratico?Comunque l'istruzione htmlentities (o htmlspecialchars) va usata sulle stringhe solo prima di mostrarle in una pagina HTML

Cosa intendi? Non la devo applicare al recupero della variabile quando uso $_POST?mentre prima di utilizzarle nello statement devi usare mysql_real_escape_string

Intendi dire che ogni volta che da una parte uso htmlentities, dall'altra devo usare mysql_real_escape_string?

risposto 6 anni fa
Schiappa
X 0 X

Ti ripeto, htmlentities o htmlspecialchars  vanno usate SOLO prima di mostrare una qualsiasi stringa dinamica in una pagina HTML. Quindi non vanno usate a priori sui dati che provengono da $_POST.

Inoltre le strighe provenienti dall'utente possono essere incluse in una query SQL solo dopo averle convertite con mysql_real_escape_string. (sto supponendo che per interagire con MySQL stai usando la classica estensione mysql e non PDO o altro).

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Scusa, sei molto gentile e tempestivo, ma non riesco ad applicare ciò che dici (sono un poppante)

Io htmlentities lo applico nella pagina che richiama la form (action) dopo il recupero della variabile con il post: Sbaglio? Se sì, come devo fare?

Grazie per la pazienza...

risposto 6 anni fa
Schiappa
X 0 X

riporta il codice dello script

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X
<form id="articolo" action="Server/inserimento.php" method="post" enctype="multipart/form-data" >
...

<h2>Descrizione:</h2>
                <textarea name="descrizione" cols='50' rows='10' >
                   <?php 
                      if(isset($_GET['descrizione'])){ 
                          $_GET['descrizione']=str_replace("<br />","",$_GET['descrizione']); 
                          echo $_GET['descrizione'];}; 
                   ?>
               </textarea>
...
</form>

Server/inserimento.php:

    <?php
        ...
        $r[1]=$_POST['nome'];
   $r[2]=$_POST['descrizione'];
   $r[3]=$_POST['consigli'];
   $r[4]=$_POST['prezzo'];
   $r[5]=$_POST['quantita'];
   $r[6]=$_POST['categoria'];
   $r[7]=$_POST['marchio'];
   
   $r[2] = htmlentities($r[2], ENT_QUOTES);
   $r[2] = nl2br($r[2]);
   $r[3] = nl2br($r[3]);
      ...
     ?> 
risposto 6 anni fa
Schiappa
X 0 X

Studia gli esempi, sopratutto l'ultimo, di questa lezione del corso PHP/MySQL

http://www.phpnews.it/corsi/corso-php-mysql/aggiornamento-dei-dati/

Vedrai come:

  • I dati, prima di essere mostrati nel form, vengono modificati con la funzione htmlspecialchars
  • I dati, prima di essere utilizzati in una query SQL, vengono modificati con la funzione mysql_real_escape_string

Nell'ultimo esempio c'è inoltre un controllo per annullare  effetti "deleterei" della direttiva magic_quotes_gpc

Se qualcosa non ti è chiaro chiedi pure.

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Non mi riesce venirne fuori...l'ho provate tutte.....

A estremis creo una tabella "inutile" dove caricare i dati e scaricarli corretti...

risposto 6 anni fa
Schiappa
X 0 X

Ma ti è chiaro il funzionamento degli script che ti ho segnalato?

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Ho risolto!

Mi ero fossilizzato sulle funzioni citate prima...

In realtà, alla fine, ho risolto il problema applicando stripslashes in entrambe le pagine.

Praticamente, per ogni passaggio di variabile da una pagina all'altra, php mi aggiungeva automaticamente uno / ogni volta....

In quanto alle altre funzioni, non mi è stato necessario utilizzarle.

Grazie mille! Il tuo tutorial è stato molto esauriente!

risposto 6 anni fa
Schiappa
X 0 X

Comunque se il magic_quote è disabilitato l'uso di stripslashes evidenzia un problema nel codice

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Quindi, per ottimizzare il tutto, dovrei cambiare qualcosa?

risposto 6 anni fa
Schiappa
X 0 X

Si, dovresti trovare il punto in cui aggiungi inutilmente gli slash in modo da poter evitare di usare poi stripslashes per rimediare a questi slash in più

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Gli slash si aggiungono automaticamente per ogni passaggio da una pagina all'altra ogni volta che c'è ' o "...

risposto 6 anni fa
Schiappa
X 0 X

se gli slash realmente vengono aggiunti automaticamente da PHP allora il magic_quote è abilitato

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda