2011-01-18 10 views
10

Ciao a tutti. Sto sviluppando un nuovo sito (php5/mySQL) e sto cercando di ottenere finalmente il carrozzone Unicode. Ammetto di non sapere assolutamente nulla sul supporto di Unicode al momento, ma spero di risolverlo con il tuo aiuto.Guide per gestire Unicode in PHP5?

Dopo aver disperatamente piegato le mie minuscole e patetiche scuse per i muscoli di Googlefu, e perlustrando ogni pagina che sembrava promettente ai miei occhi newbie Unicode, sono giunto alla conclusione che, sebbene non interamente supportato, il mio prezioso linguaggio di scelta (PHP per quelli che hanno dimenticato) ha fatto almeno un tentativo sommario di gestire la bestia straniera (e da che altro vedo, riuscendo?). Ho anche giunto alla conclusione che

<php header('Content-Type: text/html; charset=utf-8'); ?> 

è un ottimo posto per iniziare e che dovrei guardare in supporto UTF-8 dal momento che ho un sacco di spazio sul mio (comune, per il momento) di hosting.

Tuttavia, non sono sicuro di cosa questa strana funzionalità nota come mb_ * significhi o come incorporarla in funzioni come strlen() e. . . per essere onesti, a questo punto, non so quale altra funzionalità (di cui non posso vivere senza) sia influenzata.

Quindi sono venuto da voi COSÌ in cerca di illuminazione e possibilmente raddrizzando il mio cervello confuso (dove Unicode è interessato!). Voglio davvero sostenerlo ma ho bisogno di un aiuto serio.

P.S .: Unicode influenza mysql_real_escape_string() o altre misure di prevenzione/sicurezza XSS? Ho anche bisogno di rimanere aggiornato!

Grazie in anticipo.

  • Aggiunta di JavaScript nel mix, dal momento che sarò con un mix di puro e jQuery e senza sapere su supporto Unicode + questa lingua. ;)
+1

+1 per chiedere le domande che troppo pochi chiedono. Unicode è qualcosa che ogni programmatore dovrebbe capire. – Thanatos

+0

Per non parlare di PHP e Unicode non è molto semplice – GWW

+0

Concentrarsi sulla comprensione di set di caratteri, codifiche di caratteri, un po 'binario. Questa è roba piuttosto indipendente dal linguaggio. Una volta che inizi a farcela, ti renderai conto che le "mancanze" di php non sono un gran problema. – goat

risposta

5
  1. Benvenuti a bordo utf8 :)
  2. Si dovrebbe usare semplicemente mb_ * funzioni in luogo dei tuoi tradizionali str * funzioni
  3. MySQL e le sue API ha a lungo e bene stato supportando utf8, l'unico requisito per cui si utilizza codifica durante il salvataggio dei dati e la connessione . google per 'SET NAMES utf8'
  4. Nota il modificatore 'u' per le funzioni preg_ * che indica a di utilizzare la modalità Unicode.
+2

PS I file del codice sorgente devono essere utf8 WITHOUT BOM, perché rendono l'output prima che PHP inizi anche e causa problemi di "Header già inviati" dolorosamente strani. –

+0

1) Grazie mille. Sono felice di essere qui. :) 2) C'è qualche posto tipo "cheat sheet" che li elenca, o un luogo che mostra come fare? (Il manuale di PHP erm, beh, praticamente mi ha perso). 3) Ho trovato almeno questo, e come memorizzare in UTF-8. 4) '/ u', giusto?5) Uso Notepad ++ in esecuzione su Wine, quindi per rispondere alla risposta seleziono "UTF-8 senza BOM" e questo dovrebbe risolvere il file del codice sorgente? -Inoltre, mi dispiace che questo è un casino di una risposta. Sono un po 'nuovo a rispondere qui e non so se c'è comunque newline dal momento che premendo il tasto Invio sembra di inviare i miei commenti lungo la loro strada. – Zydeco

+0

2) scusa, non ne ho mai avuti, la documentazione php originale è stata abbastanza buona per me 4) yup! 5) sì, sembra giusto. A proposito, non sono nemmeno sicuro che i commenti sulla linea di supporto SO si interrompa del tutto :) –

0

Quando si lavora con unicode:

  • uso <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> in cima alla vostra pagina quando l'uscita
  • subito dopo ci si connette al database di utilizzare la query SQL: mysql_query("set names 'utf8'");
  • assicurati che tutte le tabelle e i campi obbligatori abbiano un tipo di confronto: 'utf8_unicode_ci'
+0

Ho avuto l'impressione che una combinazione di tag doctype e html appropriati abbia funzionato meglio della meta. Qualcuno può chiarirlo per me? E per quanto riguarda la connessione al database, ho pensato che se la pagina stessa fosse codificata UTF-8 e il database fosse UTF-8, tutto andava bene? – Zydeco

+0

Ho usato la combinazione di cui sopra per far funzionare le cose. Ho anche trovato il 'mysql_query' ("set name 'utf8'") 'necessario. Per quanto riguarda la corretta doctype vs meta domanda consultare un esperto. –

+0

perchè il voto negativo ?? –

Problemi correlati