• User Attivo

    PHP e MySQL - caratteri accentati

    Salve a tutti. Sto collaborando ad un sito con un mio amico e ho riscontrato questo problema.
    Nell'inserimento nel database a volte ci sono dei caratteri accentati (à,è,é,ì,ò,ù), che quando vengono richiamati in seguito danno come risultato quello spiacevole quadratino con il punto interrogativo.

    Per ovviare a questo problema, prima della memorizzazione del database, ho inserito questo:

    [PHP]$replacer= array('è' => 'è',
    'é' => 'é',
    'à' => 'à',
    'ì' => 'ì',
    'ò' => 'ò',
    'ù' => 'ù');

    foreach($replacer as $replace => $find)
    {
    $descrizione = str_replace($find, $replace, $_POST[description]);
    }[/PHP]
    Così, però, anche quando scrivo "è", lui mi memorizza "è" e non "è".
    Allora ho pensato che leggendo "è" automaticamente lo cambiasse in "è" per semplificare.

    SE, e ripeto SE ho ragione, come posso fare?
    (E se non ho ragione? :D)

    Grazie


  • ModSenior

    Dopo la connessione al database, esegui questa query:
    [php]
    SET name = utf8
    [/php]
    E dovrebbe iniziare a funzionare tutto come dovrebbe.


  • User Attivo

    Grazie, ma non funziona. Forse non l'ho scritto nel modo giusto.

    [PHP]#Ho provato con:
    //mysql_query("SET name = utf8");
    //mysql_query("SET names = utf8");
    mysql_query("SET NAMES = utf8");[/PHP]

    EDIT: effettivamente qualcosa fa, quando scrivo dei caratteri "speciali" nel db vengono tralasciati


  • User Attivo

    prova con htmlentities

    ti permette anche di agire sulle virgolette


  • ModSenior

    Se imposi al connessione in utf8, usi utf8 come codifica della pagina web, e le tabelle sono in utf8 non hai problemi. Se invece mischi le codifiche hai qualche problema, controlla che sia tutto in utf8.


  • User Attivo

    Grazie, ma ho impostato tutto a UTF-8 e non è cambiato molto, con htmlentities invece va. Dici che è strano?


  • ModSenior

    Con tutto in utf-8 dovrebbe funzionare perfettamente senza problemi.


  • User Newbie

    [php]
    SET NAMES utf8
    [/php]

    E per dargli un senso andrebbe messo in my.cnf nella sezione [mysqld] come

    [php]
    [mysqld]
    init_connect = 'SET NAMES utf8'
    [/php]

    Comunque se la classe che hai implementato per la connessione al DB e singleton o comunque e una classe mettila subito dopo esserti connesso al DB


  • User Attivo

    Ciao,
    utilizzando htmlentities non risolvi il problema, lo reggiri semplicemente, perchè questa funzione converte i caratteri accentati in entità.
    Per un corretto funzionamento utilizzando la codifica utf8 ti devi assicurare che tutto utilizzi utf8 come codifica, i file php (quindi l'editor che utilizzi), la connessione al database (quindi utilizzando SET NAMES), la codifica della pagina html (quindi il meta "Content-Type") e alcune volte occorre settare la codifica anche mediante il php tramite l'header, questo se vuoi ragionare in tutto con utf8.