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

    Mysql --> Caratteri accentati

    Ciao a tutti, ho un problema piuttosto noioso con un database mysql 5.0

    In pratica quando inserisco i caratteri accentati attraverso un campo textbox, vengono sostituiti con caratteri tipo: òÃ, ? o quadretti.

    E' un problema di collation, ne ho provate diverse, o è un problema di insert?

    Il valore che ho scritto sopra non è l'output, ma è il valore presente all'interno della tabella.

    Grazie!!!!

  2. #2
    Utente di HTML.it L'avatar di Graboid
    Registrato dal
    Oct 2004
    Messaggi
    619
    La pagina da cui invii ha il charset UTF-8?
    Il file è stato salvato UTF-8?
    La collation della tabella è UTF-8?
    Il db o i campi in cui inserisci i testi sono UTF-8?
    La pagina che visualizza i dati è salvata in UTF-8 e ha il charset UTF-8?

  3. #3
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da Graboid
    La pagina da cui invii ha il charset UTF-8?
    Il file è stato salvato UTF-8?
    La collation della tabella è UTF-8?
    Il db o i campi in cui inserisci i testi sono UTF-8?
    La pagina che visualizza i dati è salvata in UTF-8 e ha il charset UTF-8?
    E poi come fai a essere che i caratteri siano proprio quelli? Stai visualizzando tramite phpmyadmin? usando quale codifica iso o utf8?

    ciao

  4. #4
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    A prescindere da codifiche, io preferisco sempre questa bella funzioncina semplice semplice che toglie da svariati inconvenienti...

    Codice PHP:
    /* Replace the special html characters */
    function replace_special_character($text) {
        
    ereg_replace('à''à'$text);    // Replace à with à
        
    ereg_replace('è''è'$text);    // Replace è with è
        
    ereg_replace('é''é'$text);    // Replace é with è
        
    ereg_replace('ì''ì'$text);    // Replace ì with ì
        
    ereg_replace('ò''ò'$text);    // Replace ò with ò
        
    ereg_replace('ù''ù'$text);    // Replace ù with ù
        
    return $text;

    Basta invocarla prima di inserire i valori nel db...una bomba!!!


  5. #5
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da Gab-81
    A prescindere da codifiche, io preferisco sempre questa bella funzioncina semplice semplice che toglie da svariati inconvenienti...

    Codice PHP:
    /* Replace the special html characters */
    function replace_special_character($text) {
        
    ereg_replace('à''à'$text);    // Replace à with à
        
    ereg_replace('è''è'$text);    // Replace è with è
        
    ereg_replace('é''é'$text);    // Replace é with è
        
    ereg_replace('ì''ì'$text);    // Replace ì with ì
        
    ereg_replace('ò''ò'$text);    // Replace ò with ò
        
    ereg_replace('ù''ù'$text);    // Replace ù with ù
        
    return $text;

    orripilante e ora ti spiego perchè:

    1. prende in considerazione solo le lettere accentate, quando domani qualcuno inserirà un carattere la umlaut (per il tedesco), oppure il semplice » (che magari ti inseriscono incollando da word), sei fregato.

    2. Cosa succede se domani devi creare un pdf dei dati che hai su db? O ti fai una funzione inversa, oppure se hai scritto le cose bene in partenza non devi fare nulla.

    Il problema annoso della codifica caratteri spesso crea confusione, anche io ci ho sbattuto la testa forte prima di capirlo, eppure alla fine quando lo capisci è una stupidata, la morale può essere riassunta in questi 3 punti per la creazione/progettazione:

    1. Crea il db con charset, collation utf8
    2. Crea i tuoi file in utf8 (per alcuni editor non c'è questa opzione, ma è importante, perchè se scrivi una lettera accentata nei tuoi file html usando l'iso come codifica stai certo che vedrai i quadratini).
    3. Nei file php inserisci questo all'inizio :
    codice:
    header('Content-type: text/html;charset=utf-8');
    Per il debug:

    1. E' importante sapere che i browser hanno il menu visualizza->"codifica", che in genere è settato su riconoscimento automatico, ma che usato a dovere ti permette di capire in quale charset stai vedendo la pagina e se il risultato è quello che ti aspetti.
    2. E altrettanto importante sapere che phpmyadmin non sempre dice la verità, perchè alla fine è un sito che soffre anche lui del problema della codifica, io per essere certo di quello che sto guardando controllo sempre la codifica, e 9 volte su 10 se la cambi vedrai i caratteri corretti.
    Ricorda, phpmyadmin è un livello intermedio tra te e il db, è un ottimo strumento, ma non è il db, non dare per scontato che quello che ti mostra è il vero contenuto del db.

    Vedrai che se segui questi consigli i problemi saranno minori, e ti dimenticherai le htmlentities (per la quale comunque esiste una funzione apposita, e non quella funzione che usi tu)

    Ultimamente sto mettendo mano a un sito creato da altri, e mi sono trovato un header che segnalava uf8, db in utf8 e files editati in iso, con almeno 40 str_replace per pagina (una cosa simile alla tua funzione), è bastato salvare i file in utf8 per eliminare centinaia di righe di codice (che tra l'altro non danno un risultato affidabile, perchè basta dimenticare una volta il replace per introdurre un errore).

    Non è per essere presuntuoso, ma l'attenzione a queste problematiche differenzia un programmatore casalingo da un professionista.

    Ciao


  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Dimenticavo, se in una pagina html che contiene un form codificata in iso (per la quale ti sei dimenticato di inserire la codifica in utf8 con la funzione header) inserisci dei dati e li salvi in un db con utf8, in automatico non verranno inseriti in utf8, perchè la codifica del form è in iso, quindi è importante ricordarsi di specificare sempre l'header corretto.


  7. #7
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Hai ragione gianiaz...è che tante volte uno affronta il problema applicando la prima soluzione che gli passa per la mente, senza vedere se ce ne sono altre...grazie comunque delle spiegazioni date, che sicuramente altro non possono fare che arricchire il mio bagaglio ed anche quello di quanti leggeranno questo post (senza voler andare OT )...

  8. #8
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    Originariamente inviato da Gab-81
    Hai ragione gianiaz...è che tante volte uno affronta il problema applicando la prima soluzione che gli passa per la mente, senza vedere se ce ne sono altre...grazie comunque delle spiegazioni date, che sicuramente altro non possono fare che arricchire il mio bagaglio ed anche quello di quanti leggeranno questo post (senza voler andare OT )...
    Ho messo in firma il post, visto che capita spesso di vedere domande sull'argomento.


  9. #9
    Per prima cosa grazie delle risposte

    La tabella ha come collation utf8_general_ci
    La pagina: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Il browser: Unicode (UTF-8)


    ....Come faccio?

  10. #10
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    usa il comando di php, dovresti andare più sicuro.

    Hai controllato che nella pagina con il form la preselezione del browser sia su utf8?

    Fai qualche tipo di manipolazione della stringa prima di inserirla nel db?

    La pagina che mostra i caratteri strani, è una pagina che hai scritto tu o una pagina di phpmyadmin?

    ciao

    p.s.

    rifai ogni volta l'inserimento, perchè i dati errati inseriti oramai non sono più affidabili, perchè non sei sicuro di quale sia il charset

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.