Come comportarsi con i set di caratteri

Puntualmente mi ritrovo ad avere problemi con i set di caratteri.

Finora ho capito esistono differenti set di caratteri o charset che supportano caratteri differenti.

Ho del testo multilingua (it, fra, en) proveniente da un database e lì codificato con il set di caratteri di default (utf8_general_ci). Quando viene stampato nella pagina PHP che lo richiama, codificata anch'essa con utf-8, i caratteri accentati non vengono resi correttamente. Dopo un paio di tentativi ho notato che vengono resi correttamente cambiando il charset della pagina in iso-8859-1, oppure potrei risolvere con una funzioncina di questo tipo:

function entitiesHTML ($text)  {
   $chars = array (chr (224), chr (232), chr (233), chr (236), chr (242), chr (249)); /* e altri... */
   $entities = array ('à', 'è', 'é', 'ì', 'ò', 'ù');
   return str_replace ($chars, $entities, $text);
}

Piuttosto però vorrei capire veramente come comportami in questi casi, come gestire i charset quando il sito è multilingua (e se, come possibile, il cliente mi chiede di mettere anche l'arabo?  :buck:).

Non ho mai trovato una trattazione esauriente sull'argomento, qualcuno mi potrebbe spiegare o indicarmi un'ottima fonte di approfondimento please.  :bye:

inviato 9 anni fa
usecram
X 0 X

prova ad usare : htmlspecialchars o htmlentities

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

L'argomento è delicato perché PHP 5 non supporta nativamente i caratteri multibyte e quindi l'UTF-8 che invece è la vera soluzione alla realizzazione di applicazioni multilingua. La situazione cambierà notevolmente con PHP 6.

Per adottare l'UTF-8 devi verificare che tutti i passaggi e maneggiamenti dei testi siano effettuati in UTF-8. Supponendo che i dati siano in un DB allora dovranno essere in UTF-8:

1) La tabella (ed il campo) del database contenente le stringhe in questione

2) La connessione tra PHP e MySQL

3) Le funzioni PHP che gestiscono le stringhe

4) La pagina (X)HTML infine prodotta

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ok l'utf-8 è la soluzione. Detto ciò, come ho detto nel database la collation è utf-8_general_ci, nella pagina pure ma come si fa ad impostare l'utf-8 per la connessione a MySQL e le funzioni che gestiscono le stringhe?

 :-\

risposto 9 anni fa
usecram
X 0 X

per impostare "al volo" questi parametri puoi lanciare queste query:

Set names 'utf8'

Set character_set_connection=utf8

Set character_set_results=utf8

Set character_set_client=utf8

ma ovviamente il consiglio è modificare la configurazione del server in modo che tali impostazioni siano quelle di default e che quindi non sia necessario impostarle ogni volta.

Per le istruzioni invece c'è un'estensione, la mbstring, che risolve il problema del trattamento delle stringhe multibyte.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda