Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    gestione caratteri accentati mysql e php

    Salve,
    mi sono trovato davanti un problema di gestione caratteri, penso legato alla codifica dei caratteri unicode e al passaggio di stringhe da mysql a php.


    partiamo con il dire che io uso un mac, che ha una codifica diversa da quella di windows.



    Ho aperto php myadmin, e ho messo in un campo TEXT

    la seguente stringa

    "
    In tutta la storia della Galassia non risulta che alcuna civiltà sia mai stata così sciocca da usare le esplosioni nucleari come armi belliche.
    "

    in cui si vedono le due lettere accentate.


    poi recupero la stringa con una query mysql da php e mi viene visualizzata questa stringa

    n tutta la storia della Galassia non risulta che alcuna civilt� sia mai stata cos� sciocca da usare le esplosioni nucleari come armi belliche.

    con un carattere speciale (su mac è un rombo nero con un punto di domanda, su windows sembra un pittogramma) al posto delle due lettere accentate.


    come posso fare per far funzionare tutto bene ?


    grazie 10000

  2. #2
    prova così:

    Codice PHP:
    // converte i caratteri accentati in caratteri HTML
    $frase htmlentities("In tutta la storia della Galassia non risulta che alcuna civiltà sia mai stata così sciocca da usare le esplosioni nucleari come armi belliche.");
    echo 
    $frase;
    // decodifica i caratteri HTML facendoli tornare normali
    $frase html_entity_decode($frase);
    echo 
    $frase

  3. #3
    il problema non sono le entità html bensì il fatto che nel database c'è finito il tutto in UTF8, probabilmente, è giustamente non dicendo qual'è la codifica corretta si incarta tutto

    o prima di mettere la roba dentro la converti in entità html oppure sistemi la codifica

    se cerchi sul forum ci sono trilioni di argomenti a riguardo
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    In ogni caso vanno passate con html entities, altrimenti le accentate fanno il rombino... Perchè nel codice ci viene è al posto di "& e g r a v e" ed il browser va in palla

  5. #5
    Originariamente inviato da aleritty
    In ogni caso vanno passate con html entities, altrimenti le accentate fanno il rombino... Perchè nel codice ci viene è al posto di "& e g r a v e" ed il browser va in palla
    no, assolutamente falso!!!

    va sistemata la codifica PRIMA ... poi se li vuole passare come entità html nessuno glielo vieta ma tenere la codifica sballata ed usare le entità html per nascondere il problema non è il caso o alla prima variazione dei parametri del webserver non funziona più niente
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    mmmm capisco,
    e supponendo che io inserisca direttamente i dati dentro mysql senza passare per php,che tipo di codifica dovrei dare al field che conterrà quella stringa?


    poi va cmq fatto il filtraggio delle html entities?

  7. #7
    Secondo me il filtraggio va fatto comunque... Per essere sicuri! (tra l'altro ti mette al riparo anche da tentativi di injection)
    Poi il sistemare la codifica ecc. ecc. è (secondo me) superfluo, infatti facendo elaborare tutta la stringa che immetti in entità HTML "sicure" (e quindi indipendenti dalla codifica) vengono memorizzate in utf-8 e poi risputate fuori con la codifica buona per il webserver! (anche se si cambiano le impostazioni le informazioni vengono elaborate ogni volta, quindi vengono ri-elaborate e ri-sputate fuori con la codifica nuova)

    Ovviamente il mio è solo un parere personale... Chi ne sa più di me se mi spiega dove sta il mio errore mi fa un favore, così non lo ripeto in futuro!

  8. #8
    Originariamente inviato da aleritty
    Secondo me il filtraggio va fatto comunque... Per essere sicuri! (tra l'altro ti mette al riparo anche da tentativi di injection)
    Poi il sistemare la codifica ecc. ecc. è (secondo me) superfluo, infatti facendo elaborare tutta la stringa che immetti in entità HTML "sicure" (e quindi indipendenti dalla codifica) vengono memorizzate in utf-8 e poi risputate fuori con la codifica buona per il webserver! (anche se si cambiano le impostazioni le informazioni vengono elaborate ogni volta, quindi vengono ri-elaborate e ri-sputate fuori con la codifica nuova)

    Ovviamente il mio è solo un parere personale... Chi ne sa più di me se mi spiega dove sta il mio errore mi fa un favore, così non lo ripeto in futuro!
    beh, per quanto riguarda le injection conviene molto più strippare eventuali apici messi da php se il magic quote è attivo (controllando con get_magic_quote_gpc) e poi usare mysql_real_escape_string con le query

    detto questo le entità html possono pure rimanere tali, non servono per diventare un mezzo di codifica dei caratteri ma per evitare problemi di codifica con i browser ... ovvero se trasformi tutto in entità html non c'è bisogno di riconvertire tutto indietro quando invii la roba al browser

    @Nicolablu

    la codifica dipende da te ... puoi usare la latin1, che ti consiglio se non hai necessità di multi lingua o simili, o UTF8 se ti serve roba più avanzata ma con la quale le normali funzioni di php sulle stringhe (strlen, strtoupper e cosi via) non funzioneranno correttamente perché non sono supportate
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.