• Consiglio Direttivo

    [Stringhe] htmlentities();

    PHP 4, 5
    Sintassi: string htmlentities ( string $string [, int $quote [, string $charset ]] )

    htmlentities è una funzione di PHP che, come avviene con la funzione htmlspecialchars();, converte i caratteri sensibili in entità HTML, con l'unica differenza che la presente funzione converte ***tutti ***quei caratteri che hanno una corrispondente entità HTML.
    Il browser leggerà il nostro script è visualizzerà il valore originario delle nuove entita' HTML, cosa che invece non accadrà per il nostro codice, invece, dato che per lui non rappresenteranno più caratteri marcatori. 😉

    Come è facile immaginare la presente funzione torna molto utile ogniqualvolta si ricevono dati dall'esterno e quindi bisogna assicurarsi che nessuno posti del codice dannoso.

    Il parametro $quote (inserito dal modulo PHP 4.0.3) indica alla funzione cosa deve fare quando la nostra stringa contiene degli apici (singoli o doppi), e puo' assumere i seguenti valori:

    • ENT_COMPAT - valore di default se non specificato, non effettua la conversione degli apici singoli
    • ENT_QUOTES - effettua la conversione sia degli apici singoli che dei doppi apici
    • ENT_NOQUOTES - non effettua la conversione degli apici

    Pertanto, portando un breve esempio di quanto appena detto, avremo:

    <?
    $string = "Ciao <a href="bububu.sito.ext/boh.php">GT's</a>";

    // vediamo un po' di esempi variando qualche impostazione
    $string = htmlentities ( $string ); // HTML: Ciao <a href="bububu.sito.ext/boh.php">GT's</a>

    $string = htmlentities ( $string, ENT_QUOTES); // HTML: Ciao <a href="bububu.sito.ext/boh.php">GT&# 039;s</a>

    $string = htmlentities ( $string, ENT_NOQUOTES); // HTML: Ciao <a href="bububu.sito.ext/boh.php">GT's</a>
    ?>Il terzo parametro opzionale $charset (inserito dal modulo PHP 4.1.0) indica alla nostra funzione quale set di caratteri utilizzare durante la conversione, per default la funzione converte la stringa utilizzando il set di caratteri ISO-8859-1.
    I set di caratteri supportati dalla funzione sono i seguenti:

    image

    Altri set di caratteri verranno sostituiti con quello di default.
    La funzione inversa alla presente è html_entity_decode();


  • Bannato User Attivo

    Non so se sia possibile commentare.
    Io lo faccio, al massimo poi cancellate questo mio intervento.

    Non mi piace usare questa funzione.
    Spiego perchè:

    Ok se il controllo si limita allo studio del contenut odi una variabile magari acquisita con un _GET o _POST, ma se dobbiamo poi inserire tale contenuto in un database le cose diventano un pò complicate.

    Pensiamo ad esempio ad una cella di una tabella che può contenere una stringa di 10 caratteri al massimo.

    Io in una form inserisco la stringa 'Portaile84'

    che a seguito dello studio utilizzando la funzione oggetto di questo thread risulterà 'Portaile84'

    Ora, la prima può "andare bene", escludendo che se aggiungiamo qualcosa potrebbe essere usata per un SQL injection o altro che non sto qui ad indicare :P, visto che rientra nel limite massimo dei caratteri.
    Peccato che non sarà la prima ad essere usata, ma la seconda dopo essere stata convertita.
    Da 12 caratteri siamo passati a 22 caratteri.
    E se non erro, qualora volessimo memorizzare questa stringa nel nostro database, la stringa memorizzata risulterebbe 'Portaile8 che se stampata poi in una pagina html tornerebbe 'Portaile8

    Oserei dire: risultato davvero pessimo.

    😛


  • Consiglio Direttivo

    Ciao Portaile84 e grazie del tuo intervento 😉
    Così come riportato nel thread aperto da Giorgio per la presentazione della sezione:
    @Giorgiotave said:

    La sezione nasce con lo scopo di descrivere tutte le funzioni di php, portare esempi e permettere agli utenti di richiedere domande specifiche.
    ogni intervento è benvenuto, anche per spiegare lati positivi e negativi sull'uso di ogni funzione presente 😉

    Per tornare in tema....credo che la problematica relativa ai campi a caratteri "limitati" sia comune a qualunque tipo di funzione che agisca sulle stringhe che tu possa utilizzare. Magari affiancando altri accorgimenti all'uso di funzioni come la presente il problema si risolve o lo si aggira.

    Vediamo che ne pensano gli altri 😉


  • Bannato User Attivo

    @Samyorn said:

    [...]
    ogni intervento è benvenuto, anche per spiegare lati positivi e negativi sull'uso di ogni funzione presente 😉
    [...]

    Meglio allora 🙂

    Se posso dare la mia soluzione, quando effettuo uno studio sui contenuti di una variabile, personalmente quando posso evito l'uso di questa funzione.

    Preferisco invece far lavorare un pò di più il server e magari richiamare una funzione che svolge questo compito.

    Ad esempio una che ricevendo una variabile come argomento (quella sulla quale voglio studiare il contenuto) e un'altra che contiene un array di caratteri diciamo Hot.
    La funzione analizza tutti i caratteri e in base ad altre direttive se viene riscontrata la presenza di un carattere Hot o lo elimina (bloccando la procedura e restituendo un messaggio di errore) oppure cerca di annullare eventuali effetti collaterali mantenendo il suo contenuto.


  • Consiglio Direttivo

    beh, ottima cosa direi
    le funzioni "fai da te" solitamente possono dare quel punto in più di sicurezza essendo, appunto, imprevedibili 😉
    Vediamo se c'è qualcuno che invece si trova bene con l'uso di questa funzione...forza fatevi avanti, siamo ingordi di sapere 😄