2009-06-29 12 views
13

Voglio standardizzare su UTF8 sul nostro sito web. Tutti i nostri database e materiale Internet sono in UTF8. Tutti i nostri server Web inviano l'intestazione HTTP charset=utf-8. Tuttavia, ho scoperto che modificando la codifica nel mio Firefox (Visualizza -> Codifica caratteri) a qualcos'altro, posso inserire un carattere di Latin-9 in un modulo e PHP li tratta semplicemente come UTF8 malformato.Posso forzare i browser Web a inviare il testo del modulo come UTF8?

Quanto mi devo preoccupare? È possibile che il browser Web dell'utente sostituisca l'intestazione del set di caratteri UTF8 e invii non UTF8?

Aggiornamento: Diverse persone hanno suggerito accept-charset sui singoli moduli. Comunque preferirei non dover cambiare ogni modulo web. Supponendo che io possa controllare l'intestazione del tipo di contenuto HTTP, ed è impostata su UTF8, ho qualcosa di cui preoccuparmi?

+0

"Tutti i nostri database e materiale Internet" - tutte le tue cose su Internet ci appartengono. –

+0

Come per la risposta accettata a [questa domanda] (http://stackoverflow.com/questions/3719974/is-there-any-benefit-to-adding-accept-charset-utf-8-to-html-forms- if-the-page), 'accept-charset' risolverà il problema specifico che hai scoperto: cioè se l'utente dice al browser di interpretare la pagina come non UTF-8, 'accept-charset' dovrebbe far apparire il browser forma il contenuto come UTF-8 nonostante ciò.Vale la pena di aggiungere l'attributo a tutte le forme, a prescindere da quella particolare situazione, è il tuo giudizio. –

+1

assicurati che la tua pagina sia veramente utf-8; nel browser debugger, cerca l'intestazione Content-Type che viene inviata. Inoltre, nella console JS, valutare document.charset; dovrebbe restituire l'ortografia di utf8. 'windows-1252' potrebbe significare che il browser non riconosce la codifica inviata. – OsamaBinLogin

risposta

3

Prova ad aggiungere l'attributo accept-charset agli elementi del modulo.

2

Inserire un elemento accept-charset = "UTF-8" nell'elemento del modulo, che farà sì che il post del modulo sia UTF-8 nonostante la codifica del contenuto della pagina.

10

E 'possibile per il browser web dell'utente per sovrascrivere l'utf8 charset intestazione e inviare non-UTF8?

Naturalmente. Non si controlla il client e il client può fare tutto ciò che desidera, compreso consentire agli utenti di ignorare le codifiche normali e causare la posta indesiderata (o quello che passa per la posta indesiderata) da inviare al server.

Detto questo, sembra che tu abbia preso la maggior parte dei passaggi importanti qui. Il tuo vero documento HTML è codificato in UTF-8 e contrassegnato esplicitamente come tale, il che significa che in genere i browser invieranno automaticamente anche i moduli in quella codifica. (Si noti che le specifiche HTML non richiedono questo. Specificare il accept-charset nel modulo in modo esplicito è l'unica garanzia conforme allo compatibile con le specifiche). Sospetto che questo funzionerà come previsto in tutti i browser moderni, e si potrebbe testarlo facilmente.

Sul server, il tuo lavoro è sempre per convalidare il vostro contributo nella misura in cui è importante per il vostro servizio. Sebbene la stragrande maggioranza dei tuoi utenti sia benevola e utilizzi moderni browser standard, il protocollo HTTP è aperto, e sia gli utenti stravaganti che gli hacker malintenzionati sono là fuori, ed entrambi possono lanciare qualsiasi tipo di dati che desiderano. Assicurati di non fare ipotesi sulle codifiche dei dati quando sono coinvolti sicurezza o dati autenticati e di disinfettare queste cose prima di inserirle nei database.

4

Penso che la soluzione migliore sia convertire in UTF-8 e gestire qualsiasi carattere non UTF-8 quando l'utente invia i dati. Come notato sopra, lo accept-charset="UTF-8" non garantisce che i dati siano UTF-8. E, se devi cambiare i moduli in tutto il tuo sito, allora non è una buona soluzione.

Quindi, elaborare l'input dopo l'invio potrebbe essere un modo migliore.

Problemi correlati