Domanda

Come posso sapere quale codifica verrà utilizzata da PHP durante l'invio di dati al browser? Cioè con l'intestazione Cotent-Type, ad esempio: iso-8859-1.

È stato utile?

Soluzione

Di solito i server Apache + PHP dei webhoster sono configurati per inviare NO charset intestazione . I modi più brevi per testare come è configurato il tuo server sono questi:

  • Utilizza questo strumento per visualizzare l'intestazione del server inserendo una delle tue pagine nel tuo webiste . Se nelle intestazioni del server viene visualizzato un <?php echo ini_get('default_charset'); ?> significa che il server lo sta utilizzando, di solito non conterrà un AddDefaultCharset some_charset.
  • Un altro modo è quello di eseguire questo semplice script sul tuo server: <=> Come detto sopra questo di solito stampa una stringa vuota, se diversa ti mostrerà il <=> del PHP.

La seconda soluzione suppone che Apache non sia configurato con <=> che di solito non è il caso, ma in tal caso temo che l'impostazione di Apache potrebbe sovrascrivere la direttiva ini PHP deafult_charset.

Altri suggerimenti

Puoi usare la soluzione header () che William ha suggerito, tuttavia se stai eseguendo Apache e la configurazione di Apache sta usando un set di caratteri predefinito, che vincerà ogni volta (Internet Explorer diventerà pazzo) Vedi: AddDefaultCharset

Tieni presente che i tipi di contenuto e le codifiche sono due cose diverse. text / html è un tipo di contenuto; ISO-8859-1 e UTF-8 sono codifiche.

L'intestazione della risposta HTTP che il server invia in genere è simile al seguente:

Content-Type: text/html; charset=utf-8
&

quot; & Charset quot; è in realtà la codifica dei caratteri. Non è in un'intestazione separata; tuttavia esiste un'intestazione chiamata " Content-Encoding " che specifica il tipo di compressione utilizzato dalla risposta (ad esempio gzip).

Se si desidera modificare la codifica dei caratteri in UTF-8, in un file che contiene HTML:

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

Puoi impostare il tuo con header('Content-type: xxx/yyy');, ma credo che text / html sia inviato di default.

AFAIK, PHP invia le stringhe per byte. cioè, se le tue variabili contengono UTF-8, invierà UTF-8. se hai iso-8859-1, lo invierà anche quello. se li mescoli, non sarà carino.

Se il tuo server non è configurato per avere un contenuto o un set di caratteri predefiniti, e nemmeno PHP, PHP invierà solo Content-Type: text/html - non specificherà affatto un set di caratteri e invierà i byte come li vede in la sceneggiatura.

Se un browser riceve una pagina senza set di caratteri specificato, possono accadere varie cose:

  • la maggior parte dei browser ha un " Encoding / Charset " menu; se l'utente ne seleziona esplicitamente uno, il browser proverà ad applicarlo. Non succede troppo spesso, quindi:
  • alcuni browser tentano di renderizzarlo con un set di caratteri predefinito (che dipende dalle impostazioni locali, ad esempio per FF e cs_CZ era iso-8859-2; YMMV)
  • IE proverà a determinare euristicamente il set di caratteri (ci vorrà un'ipotesi, basata sulla distribuzione dei caratteri - e molte volte lo fa bene; a volte lo sbaglia e si ottiene una pagina in rumeno interpretata come testo cinese, che di solito significa " illeggibile ")
  • alcuni vecchi browser torneranno su us-ascii

Se con questa procedura, il set di caratteri dello script PHP e il set di caratteri del browser corrispondono, il testo sarà - accidentalmente - leggibile. Altrimenti, ci saranno strani segni e fenomeni simili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top