Visualizzazione risultati 1 fino 8 di 8

Discussione: codifica in UTF8

  1. #1
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito codifica in UTF8

    Salve a tutti,
    sto cercando di capire perchè nel database i caratteri accentati mi vengono salvati in questo modo
    D'AMORE
    invece di scrivere D'AMORE.

    Ho impostato nella connessione al database la codifica utf8
    Codice PHP:
    $mysqli = new mysqli("localhost","root","pass","db");
    $mysqli->set_charset('utf8');
    ma sembra non servire.

    Va tutto bene, però non codifica l'inserimento dati $mysqli->query("INSERT ....e quindi poi non riesco a trovarli.
    Grazie

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Quelli che descrivi non sono "caratteri accentati", bensì caratteri speciali.
    Normalmente vengono inseriti nella base di dati così come sono, indipendentemente dal charset. Se l'apostrofo viene convertito in ' vuol dire che, nel codice, vengono utilizzate funzioni come htmlspecialchars o htmlentities.

    I suggerimenti che do più spesso:


  3. #3
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Devi avviare la connessione, creare la tabella e l'output con il charset appropriato.. http://forum.it.altervista.org/php-m...ml#post1372667 segue un esempio (da phpmyadmin le accentate si salvano in LATIN-1).
    Facci sapere perché i dati prelevati vengono trasformati? (In genere quando si prelevano dati esterni li si neutralizza per evitare attacchi a MySQL , es. mysqli_real_escape_string())
    Ultima modifica di darbula : 26-10-2018 alle ore 16.13.06

  4. #4
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Quelli che descrivi non sono "caratteri accentati", bensì caratteri speciali.
    Normalmente vengono inseriti nella base di dati così come sono, indipendentemente dal charset. Se l'apostrofo viene convertito in ' vuol dire che, nel codice, vengono utilizzate funzioni come htmlspecialchars o htmlentities.
    Si, in effetti è così.
    Codice PHP:
    $cognome =htmlspecialchars($_POST['cognome'], ENT_QUOTES);
    Però se lo stampo me lo visualizza bene
    Codice PHP:
    echo $cognome;
    Solo sul database viene riportato con i caratteri speciali.
    Cosa mi consigli di fare ?
    Grazie

  5. #5
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Devi avviare la connessione, creare la tabella e l'output con il charset appropriato.. http://forum.it.altervista.org/php-m...ml#post1372667 segue un esempio (da phpmyadmin le accentate si salvano in LATIN-1).
    Facci sapere perché i dati prelevati vengono trasformati? (In genere quando si prelevano dati esterni li si neutralizza per evitare attacchi a MySQL , es. mysqli_real_escape_string())
    Grazie della risposta darbula.
    Non lo so perchè i dati prelevati vengono trasformati.
    Come ho risposto a mzanella.
    In teoria vengono elaborati bene, perchè se prima di eseguire l'INSERT metto un echo, mi visualizza i dati corretti.
    Nonostante questo nel database vengono salvati con la codifica dei caratteri speciali.
    Grazie ancora

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,689

    Predefinito

    Citazione Originalmente inviato da pierinik Visualizza messaggio
    Però se lo stampo me lo visualizza bene
    Codice PHP:
    echo $cognome;
    Probabilmente perché tu vedi l'interpretazione html dei caratteri speciali. Prova a guardare il sorgente della pagina, e non la pagina interpretata HTML.

    Ciao!

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Si, in effetti è così.
    Codice PHP:
    $cognome =htmlspecialchars($_POST['cognome'], ENT_QUOTES);
    Bene, ecco svelato il mistero Se usi quel codice per trasformare gli apostrofi in ' è normale che poi tu abbia il codice al posto dei caratteri speciali.
    Come dice alemoppo, quando mostri il valore estratto usando echo, ottieni solo apparentemente l'apostrofo. In realtà il valore stampato è il codice ', è il browser a convertire automaticamente i codici in caratteri per la visualizzazione.

    A questo punto devi decidere tu se continuare ad usare htmlspecialchars inserendo i codici nella base di dati, oppure smettere di usarlo in modo da inserire i caratteri così come sono.

    I suggerimenti che do più spesso:


  8. #8
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Thumbs up

    OK. Allora smetto di usare htmlspecialchars.
    Grazie a tutti per l'aiuto

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •