Newsgroup: it.comp.www.php
Titolo: Encoding UTF-8

Prima di tutto, č corretto utilizzare l'utf-8 per un sito multilingua? 
Per ora italiano e inglese, ma non escludo l'utilizzo di lingue con 
caratteri strani, tipo tedesco, in futuro.
Non ci sto capendo piů niente e vorrei far luce definitivamente:
sono su windows, il database mysql č utf8_general_ci, con phpmyadmin (il 
cui sorgente html indica charset=utf-8), vedo le accentate bene.
Il mio html ha anch'esso charset=utf-8, ma non vedo le accentate. Ho 
provato a fare utf8_encode() sulla stringa che devo mandare in output e 
funziona, ma come faccio a renderlo definitivamente cosě, senza ogni 
volta chiamare quella funzione?
Google ha detto di cambiare il php.ini modificando alcuni valori delle 
mb.string, ma non ho avuto fortuna.
Grazie!

 mb.string, ma non ho avuto fortuna.
mb-string serve per fare elaborazioni sulle stringhe in utf8. Ricordati 
di controllare sempre se esiste una funzione mb_qualcosa() ogni volta che 
devi elaborare una stringa in utf-8. Per esempio, non usare strlen(), ma 
mb_strlen(), altrimenti avrai un risultato sbagliato.
Se non esiste, devi valutare se la funzione base basta o se devi 
implementare qualcosa tu.
Bye.

 iso-8859-1 o in windows-1252.
Per ora uso PSPad sotto windows, che proprio nell'unico file in cui uso 
del testo statico, tipo <p>questo è il testo </p>, salvava in ANSI e in 
tutti gli altri salva in utf-8. Ora è a posto anche lui!
Tutto questo per un sito che ho in locale.
Per un altro sito che ho su aruba, stessa identica situazione (mysql con 
utf8_general_ci, phpmyadmin con utf-8 visualizza bene le accentate, il 
mio script con
header('Content-Type: text/html; charset=UTF-8');
e
mysql_query("set names 'utf8'"); in alto), ho ancora problemi di 
visualizzazione delle lettere accentate. Uso ancora PSPad con encoding 
UTF-8.
Che altro può essere?

 Che altro può essere?
Ah, se da Firefox forzo ISO-8859-1, vedo tutto bene, malgrado tutto il 
resto sia UTF-8.
Ho provato anche a salvare il dump, l'ho aperto con notepad2 impostato 
in UTF-8 e si vedeva tutto bene, ho eliminato la tabella incriminata e 
reimportato il dump, esattamente come prima...
L'unica cosa è che sotto "Databases" in phpmyadmin vedo:
database		collation
information_schema	utf8_general_ci
miodatabase		utf8_general_ci
Total: 2		latin1_swedish_ci
Come cambio quel latin1? E soprattutto perchè è latin1 se tutto il resto 
è utf-8? Grazie ancora

 E soprattutto perchè è latin1 se tutto il resto è utf-8?
Dovrebbe essere il global value, cioè il default. Controlla "Variables".

 mysql_query("set names 'utf8'");
Sconsigliato dalla documentazione, la quale consiglia di utilizzare
mysql_set_charset() o l'equivalente per mysqli
http://www.php.net/manual/en/function.mysql-set-charset.php
 (vedi le note in cui
e' detto di non usare la query, ma questa funzione)
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
A chicken is an egg's way of producing more eggs.

 Prima di tutto, è corretto utilizzare l'utf-8 per un sito multilingua?
Si'.
A suo tempo mi era stato utilissima la lettura di questa pagina per la
conversione PHP 
http://www.nicknettleton.com/zine/php/php-utf-8-cheatsheet
 e
questa pagina del bravissimo Spolski per la comprensione di UTF8
http://www.joelonsoftware.com/articles/Unicode.html
Consiglio una lettura di entrambe perche' spesso chiariscono molti dubbi.
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Postmen never die, they just lose their zip.

 Dovrebbe essere il global value, cioè il default. Controlla "Variables".
Vero, è il global, ma essendo su tophost (prima ho sbagliato dicendo 
aruba) dubito di poterlo cambiare...sbaglio?
In ogni caso ho risolto semplicemente mettendo charset=iso-8859-1 via 
html. Non chiedetemi perchè, ma funziona (anche se preferirei l'utf-8)

 Consiglio una lettura di entrambe perche' spesso chiariscono molti dubbi.
Ti ringrazio, provvederò. Ho messo set_charset come hai consigliato 
invece della query, tutto ok

 invece della query, tutto ok
Rettifico, funziona in locale con tutto aggiornato, mentre su tophost 
hanno ancora mySQL 5.0.3 (quella funzione ha bisogno della 5.0.7 per 
funzionare)

 mysql_set_charset() o l'equivalente per mysqli
Hai ragione, ma e` "nuova di pacca" (PHP >= 5.2.3 e MySQL >= 5.0.3), e 
ammetto che non la conoscevo.
Purtroppo non tutti gli host hanno a disposizione queste versioni. Per 
esempio Debian fino alla etch aveva 5.2.0, e la lenny (che ha la 5.2.6) 
e` diventata stable solo da un mese scarso. Non tutti i server sono stati 
aggiornati (tra cui i miei :) ).
Bye.

 e' detto di non usare la query, ma questa funzione)
Non l'avevo verificato perche' davo per scontato che la libreria mysql fosse
sincronizzata con mysqli, dove la funzione e' disponibile anche per PHP 5.1.0
Una buona ragione in piu' per usare mysqli :)
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Dopo le 3 del mattino, due sole categorie di persone sono al lavoro:
le prostitute e i programmatori.
    --Paolo Ventafridda