sviluppare "utf-8 safe"

ciao a tutti, per una ragione o per un'altra

ho sempre problemi con l'encoding dei caratteri!

è matematicamente certo che sbaglio qualcosa

vorrei capire dove  ;D

i miei db sono tutti con collate utf8_unicode_ci... questo è giusto?

l'encoding dei caratteri, lo fa mysql? oppure bisogna farlo con php prima di fare le insert?

inviato 8 anni fa
Conroe
X 0 X

L'argomento non è dei più semplici perché PHP non "pensa" in UTF-8 ma questo non significa che non si possa usare questo set di caratteri in tutti gli strati dell'applicazione.

Ecco i principali accorgimenti da adottare:

  • Salvare tutti i file che costituiscono il sito in UTF-8 (script PHP, template HTML, CSS, javascript, ecc.) utilizzando un editor adeguato
  • Inviare al browser le intestazioni in modo da istruirlo sul set di caratteri utilizzato nella pagina web:

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

    Sempre per la stessa ragione conviene inserire nelle pagine HTML il seguente metatag:

    [tt]<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />[/tt]

  • Poiché, come ti ho anticipato, PHP non funziona internamente in UTF-8, molte funzioni che lavorano sulle stringhe possono presentare seri malfunzionamenti se applicate su testi UTF-8. Per risolvere questo problema si possono adottare diverse strategie: utilizzare l'estensione mbstring e fare in modo che essa rimpiazzi tutte le funzioni PHP "pericolose" per l'UTF-8, oppure utilizzare direttamente le funzioni dell'estensione mbstring

  • le funzioni htmlentities e htmlspecialchars vanno utilizzate specificando come ulteriore parametro il charset UTF-8
  • Impostare il charset e il collation delle tabelle e dei campi di MySQL rispettivamente a utf8 e utf_8_general_ci
  • Appena dopo aver eseguito la connessione a MySQL, lanciare la seguente query "SET CHARACTER SET utf8"

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

grazie Gianni, gentilissimo

quali sarebbero le funzioni php non "utf-8 safe"?

risposto 8 anni fa
Conroe
X 0 X

qui trovi un elenco dettagliato:

http://www.phpwact.org/php/i18n/utf-8

comunque quelle principali sono quelle reimplementate dall'estensione mbstring, ovvero:

mail()      -> mb_send_mail()
strlen()   -> mb_strlen()   
strpos()   -> mb_strpos()
strrpos()   -> mb_strrpos()
substr()   -> mb_substr()
strtolower()   -> mb_strtolower()
strtoupper()   -> mb_strtoupper()
substr_count()   -> mb_substr_count()
ereg()      -> mb_ereg()
eregi()      -> mb_eregi()
ereg_replace()   -> mb_ereg_replace()
eregi_replace()   -> mb_eregi_replace()   
split()      -> mb_split()

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

rieccomi,

bella sòla :D

io non capisco perchè aspettare php6 per unicode. tutto qui

un'ultima (spero) domanda... l'ext mb string quanto è diffusa su php5?

non ho mai capito come funzioni con pear/pecl...

grazie ancora sei gentilissimo

risposto 8 anni fa
Conroe
X 0 X

Sul mio hosting c'è  :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

anche sul mio, :D

risposto 8 anni fa
Conroe
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda