Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Multilingua e utf-8

  1. #1
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193

    Multilingua e utf-8

    Sto facendo un sito multilingua e pertanto uso il charset UTF-8 per la compatibilità a 360° con tutte le lingue du mondo.

    Però ho dei buchi nella mia conoscenza e vi sarei grato se poteste delucidarmi su un paio di punti:

    1. a livello PHP, devo preoccuparmi di usare funzioni particolari per confrontare stringhe, salvare stringhe/testo nel database? (utf8_encode(), ...?) Oppure il tutto è trasparente, ovvero continuo con i soliti $s == '', $s = "ciao"; ... etc

    2. Uhm, in effetti non c'è altro, non mi viene in mente altro eh.

    3. Anzi no, se vado sul sito ati, in alto c'è un menù a tendina dove scelgo il paese, e il russo viene scritto con questa roba:

    codice:
    <span lang=ru style='font-family:windows-1251;'>Россия</span>
    
    <span lang=ru style='font-family:windows-1251;'>& #1056;& #1086;& #1089;& #1089;& #1080;& #1103;</span>
    E' normale?

    Grazie mille in anticpio per qualunque info

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Multilingua e utf-8

    Originariamente inviato da Cerebro
    1. a livello PHP, devo preoccuparmi di usare funzioni particolari per confrontare stringhe, salvare stringhe/testo nel database? (utf8_encode(), ...?) Oppure il tutto è trasparente, ovvero continuo con i soliti $s == '', $s = "ciao"; ... etc
    Dipende dalla operazione.
    Assegnazioni, comparazioni (con == o !=) si possono fare nel modo usuale. La determinazione della lunghezza della stringa, ad esempio no. In utf-8 un carattere può essere rappresentato con più byte e strlen conta i byte della stringa, non i singoli caratteri effettivi (poiché non sa come sono codificati fisicamente).

    Ci sono delle funzioni apposite nella libreria iconv, esempio iconv_strlen() che però è supportata solo dal PHP 5.

    Purtroppo queste questioni legate ai charset non sono sempre di facile risoluzione, specialmente in PHP.


    Originariamente inviato da Cerebro
    codice:
    <span lang=ru style='font-family:windows-1251;'>Россия</span>
    
    <span lang=ru style='font-family:windows-1251;'>& #1056;& #1086;& #1089;& #1089;& #1080;& #1103;</span>
    windows-1251 è il charset adatto per la codifica di caratteri cirillici, quindi appropriato per le lingue russo e bulgaro.

    La entità & #1056; (per fare un esempio) corrisponde al carattere con valore 0xD0 secondo il charset windows-1251. Pertanto è indifferente mandare in output la stringa & #1056; o il singolo byte con valore 0xD0
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Ok, grazie. Sono riuscito a convertire quasi tutto, seguendo anche queste dritte. Ho installato mysql 4.1.22 in locale e settato per usare utf8. Ho provatoa inserire del testo in russo nel sito e viene visualizzato correttamente.

    Un'inesattezza invece per quanto riguarda le lettere accentate italiane, che non riesco a risolvere: la stringa "Menù", nel database compare "Menù" (e la cosa mi puzza, non dovrebbe convertire "ù" in entità come pe rle scritte russe?

    Comunque, su Firefox viene visualizzata come "Menù?" mentre su IE6 "Menù ", con uno spazio in fondo. Come tolgo quel fastidiosissimo "?"

    ps: prima di madnare tutto in output, eseguo una htmlentities($txt, ENT_QUOTES, "UTF-8")

  4. #4
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    up per sti cavoli di "?"

  5. #5
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Risolto il fatto dei '?' usando un editor che supporta l'Unicode.

    Un'altra questione ora mi sovviene.

    Ammesse che utilizzi l'utf8 in tutto il sito, se da utente esterno vado a visualizzare il sorgente, come mi aspetto di dover visualizzare i caratteri dopo il 128? Come entità html o come carattere liscio? Ad esempio una "a accentata", può sussistere a spasso nel codice html come "à" o per forza come "&amp;agrave;" ?

    Insomma devo far passare TUTTE le stringhe per htmlentities($stringa, ENT_NOQUOTES, 'UTF-8')?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cerebro
    Insomma devo far passare TUTTE le stringhe per htmlentities($stringa, ENT_NOQUOTES, 'UTF-8')?
    No, non è obbligatorio. Le entità sono sempre ammesse, sia quelle numeriche che letterali. Se la pagina dichiara nel head un certo charset, allora si può anche mettere direttamente la sequenza di byte secondo quel determinato charset.

    Se la pagina dichiara utf-8, allora ad esempio per scrivere la lettera 'ó' puoi scrivere:
    - la entità &oacute;
    - la sequenza di byte C3h B3h ("ó")
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Ok

  8. #8
    Io ti consiglio di utilizzare una libreria e non pensarci piu.. utf-8 sempre così non ti preoccupi per il charset... e la notte dormi tranquillo

  9. #9
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Sì infatti da quì in avanti userò sempre utf8. Ma non ho capito cosa intendi per libreria.

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.