Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    inviare caratteri speciali da form

    Ho notato che i caratteri virgoletta ' doppia virgoletta " e barra inversa \ passati attraverso un campo text o textarea di un form vengono restituiti male nelle variabili php.
    Esiste un modo per ovviare a questo inonveniente?


    Ad esempio se ho:
    <form method="post" action="recupera_form.php">
    <input type="text" name="testo">
    <textarea cols="60" rows="10" name="area_testo"></textarea>
    <input type="submit" value="invio">
    </form>

    le variabili $_POST["testo"] e $_POST["area_testo"] se digito " risultano \", se digito ' risultano \' e se digito \ risultano \\.

    Se inoltre voglio restituire i valori alla prima pagina, attraverso un altro form con campi hidden che reinviano i valori, questi si modificano ancora.

    Ad esempio:
    <form method="post" action="recupera_form.php">
    <input type="text" name="testo" value="$_POST["testo"]" >
    <textarea cols="60" rows="10" name="area_testo">
    <?php echo $_POST["area_testo"] ?>
    </textarea>
    <input type="submit" value="invio">
    </form>

    e nella pagina che riceve:
    <form method="post" action="form.php">
    <input type="hidden" name="testo" value="$_POST["testo"]" >
    <input type="hidden" name="testo" value="$_POST["area_testo"]" >
    <?php echo $_POST["area_testo"] ?>
    </textarea>
    <input type="submit" value="modifica">
    </form>

    i valori \' \" e \\ risultano \\ \\\ e \\\\. Così via, continuando a richiamare le due pagine, fino ad avere solo una serie di barre inverse che aumenta continuamente.

  2. #2
    Con un pò di esperienza sono arrivato a questa funzione da usare su OGNI stringa che contiene caratteri liberi prima di fare la query:


    codice:
    /* ### FORMATTAZIONE DATI PER DATABASE (RIMOZIONE TAG ED INSERIMENTO ESCAPE) ### */
    function 	formatDbString($fStrFormData) {           
    
    		$fStrFormData=str_replace("\\'","&#39",$fStrFormData);
    		$fStrFormData=str_replace("\\\\","&#92",$fStrFormData);   
    		$fStrFormData=str_replace("<","&#60",$fStrFormData);
    		$fStrFormData=str_replace(">","&#62",$fStrFormData);
    		$fStrFormData=str_replace("$","&#36",$fStrFormData); 
    
    		$fStrFormData=str_replace("\\\"","&#34",$fStrFormData); 
      	                  
    		return $fStrFormData;
    }
    come puoi vedere a volte prima del carattere da sostituire ci sono uno o più escape questo è dovuto da alcune impostazioni del tuo server web, ti consiglio di provare per trovare l'esatta configurazione che a te serve!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  3. #3
    Vedo che non è semplice, si tratta di sostituire caratteri. Ci proverò, grazie.

  4. #4
    La funzione lavora correttamente, nel senso che se scrivo " la variabile mi restituisce ".
    Purtroppo però non funziona quando scrivo html, nel senso che se scrivo <p align="center"> l'attributo non viene letto. Certo funziona senza virgolette, <p align=center>

  5. #5
    Ah ma tu vuoi mettere del codice html nel database e stamparlo a video? Allora devi fare anche una funzione per la stampa:

    codice:
    /* ### FORMATTAZIONE DATI PER OUTPUT (RIMOZIONE TAG ED INSERIMENTO ESCAPE) ### */
    function 	formatOutputString($fStrFormData) { 
    	
    		$fStrFormData=str_replace("&#39","\\'",$fStrFormData);
    		$fStrFormData=str_replace("&#92","\\\\",$fStrFormData);   
    		$fStrFormData=str_replace("&#60","<",$fStrFormData);
    		$fStrFormData=str_replace("&#62",">",$fStrFormData);
    		$fStrFormData=str_replace("&#36","$",$fStrFormData); 
    
    		$fStrFormData=str_replace("&#34","\\\"",$fStrFormData); 
    		
    		$fStrFormData=stripslashes($fStrFormData);
      	                  
    		return $fStrFormData;
    }
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  6. #6
    Veramente io volevo solo di stampare codice html inserito da un form, senza inserirlo in un database. Questa seconda funzione che mi hai dato lavora perfettamente. Ti ringrazio e terrò conto anche della prima, nel caso avessi bisogno di inserire dei record contenenti codice.

  7. #7
    Nono, la prima serve quando INSERISCI NEL database, se peschi la roba dal database e la stampi a video t serve sempre la seconda!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  8. #8
    Basta ke usi stripslashes quando leggi i dati inviati col form...

  9. #9
    Le funzioni mi sono state di grande utilità. Oltretutto non rallentano il processo in modo percettibile.
    Stripslashes non so cos'è (una funzione?), fate conto che sono appena approdato a php basandomi su manuali (sono a metà e comunque sui manuali non c'è mai tutto).

  10. #10
    stripslashes è una funzione che toglie i backslash ...ke è quello ke vuoi fare tu!

    Praticamente se hai una stringa con \' \" e \\ diventano: ' " e \

    la sintassi è facilissima: $variabile = stripslashes($testo);


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.