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

    [MySQL][Utf-8]Caratteri cinesi

    Ehilà...
    torno con un quesito strano.

    La settimana scorsa, nel posto dove lavoro, ho fatto la conversione del sito da latin1 a utf8 (per via di alcuni inserimenti in caratteri cinesi, arabi, etc...).
    Il server db è mysql, il db è utf8_general_ci, idem charset e collation delle tabelle e colonne.
    Però quando vado a inserire dei caratteri cinesi uno su 10 restituisce "è"+due quadratini neri col punto di domanda (quelli classici di quando sbagli la codifica)

    idee su dove sbaglio?
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    l'header della pagina di inserimento dove è presente il form com'è settato?

    Nelle pagine php che generano i file html inserisci questo a inizio pagina:

    header('Content-type: text/html;charset=utf-8');

    Se invece sono pagine html esiste l'equivalente nel tag <meta> di cui però non ricordo la sintassi precisa.

    ciao

  3. #3
    in ogni pagina è presente il tag <meta ..... settato su utf8
    nell'httpd.conf di apache ho messo la direttiva AddDefaultCharset = utf8

    altre idee?
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    l'errore te lo da anche con le semplici lettere accentate o solo con i caratteri cinesi?

    L'inserimento come avviene, con un copiaincolla?

    Infine, sei sicuro che il tag meta abbia la sintassi corretta? una volta sono impazzito perchè avevo messo UTF-8 anzichè UTF8 (o viceversa, come ti dicevo non ricordo la sintassi corretta).

  5. #5
    solo con alcuni caratteri cinesi

    ho provato a inserirlo da phpmyadmin ma fa un gran macello;
    invece inserendolo dal nostro cms(perl) da questo problema;
    comunque si, viene fatto un copia e incolla da un pdf;

    si si; il tag va bene cosi (spero) (faccio altre prove cambiandolo)

    altre idee?
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  6. #6
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    l'unica cosa che ti consiglio e di verificare bene tutti i passaggi, e soprattutto di non fidarti di quello che ti mostra phpmyadmin, e di non fare inserimenti da phpmyadmin.
    Tutti i miei siti in utf8 mostrano schifezze in phpmyadmin, ma funzionano perfettamente.

    Per quanto riguarda il copia incolla da pdf, non vorrei che ci fosse di mezzo una codifica diversa anche nel pdf, l'ideale sarebbe riuscire a inserire il carattere che copi direttamente da tastiera per escludere il possibile errore, ma mi rendo conto che non è un compito banale

  7. #7
    infatti non uso phpmyadmin per gli inserimenti diretti in tabella...

    ho provato anche a copiarlo dal pdf, incollarlo in notepad++, conversione in altri formati e poi inseriti nel db ma il risultato è sempre quello (quando non è peggio)

    a questo punto anche io avevo pensato l'inserimento da tastiera, ma non c'è altrimenti?
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  8. #8
    allora, per gestire CORRETTAMENTE l'UTF8 si deve:
    - avere le tabelle con il charset/collation su UTF8 (è questo mi sembra ci sia)
    - avere gli appositi header per l'utf8 (è questo mi sembra pure ok)
    - dire a mysql/php che la connessione usa un charset basato su UTF8 (e questo credo che manchi)

    Dai un occhio a questo link
    http://dev.mysql.com/doc/refman/5.0/...onnection.html

    Fatto questo devi fare MOLTA attenzione a come gestisci TUTTO!!!

    Considera che una è non sarà un carattere ma due caratteri (purtroppo, attualmente, php non distingue i caratteri dai byte e di conseguenza non supporta i charset multibyte ... ergo niente supporto a UTF8, unicode e cosi via ... per le funzioni di php interne per gestire le stringhe) quindi devi gestire le stringhe correttamente ovvero
    http://it.php.net/mbstring

  9. #9
    allora, per gestire CORRETTAMENTE l'UTF8 si deve:
    - avere le tabelle con il charset/collation su UTF8 (è questo mi sembra ci sia)
    - avere gli appositi header per l'utf8 (è questo mi sembra pure ok)
    - dire a mysql/php che la connessione usa un charset basato su UTF8 (e questo credo che manchi)

    Dai un occhio a questo link
    http://dev.mysql.com/doc/refman/5.0...connection.html

    Fatto questo devi fare MOLTA attenzione a come gestisci TUTTO!!!

    Considera che una è non sarà un carattere ma due caratteri (purtroppo, attualmente, php non distingue i caratteri dai byte e di conseguenza non supporta i charset multibyte ... ergo niente supporto a UTF8, unicode e cosi via ... per le funzioni di php interne per gestire le stringhe) quindi devi gestire le stringhe correttamente ovvero
    http://it.php.net/mbstring
    ti ringrazio per la risposta e ti dico che mi sono molto documentato (essendo per me un argomento complesso) e più o meno so come php gestisce i caratteri multibyte (non li gestisce)
    Mi dispiace non essere stato tanto chiaro ma ho postato qui (essendo forum php/mysql) perchè secondo me il problema stava su mysql, acnhe se il cms è in perl (magari postavo di la e mi dicevano: "problema di mysql => va di la", allora uno vale l'altro)
    Il problema vero e proprio e che viene tutto gestito correttamente (àèéìòù, arabo, russo, etc) solo questi 3 caratteri cinesi non vengono gestiti a modo...
    spero di essere stato chiaro e spero che sappiate aiutarmi
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  10. #10
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    guarda anche per me è un argomento complesso e non si smette mai di imparare a riguardo, quindi la mia opinione prendila comunque con le pinze, ma secondo me se ti gestisce bene tutti gli altri caratteri il problema non sta in come hai gestito il charset, ma forse è l'origine (il copia - incolla), oppure come diceva daniele è un problema legato al troncamento di una stringa, infatti se usi substr su una stringa UTF8 potresti troncare a metà un carattere ottenendo un carattere senza senso.
    Siccome fai copia incolla, potrebbe essere che il carattere sia sempre nella stessa posizione e soffra sempre dello stesso problema.
    Una prova potrebbe essere copiare e incollare il singolo carattere.
    Purtroppo non ho altre idee.

    ciao

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.