Come modificare la codifica predefinita in UTF-8 per Apache?


138

Sto usando una società di hosting e elencherà i file in una directory se il file index.htmlnon è presente, utilizza iso-8859-1 come codifica predefinita.

Se il server è Apache, c'è un modo per impostare UTF-8 come predefinito invece?

Aggiornamento: Inoltre ho scoperto che in realtà sta usando un DOCTYPE di HTML 3.2 e quindi non esiste alcun set di caratteri ... quindi non imposta alcuna codifica. Ma c'è un modo per cambiarlo per usare UTF-8?

Risposte:


176

In httpd.conf aggiungi (o cambia se è già lì):

AddDefaultCharset utf-8

6
dove nel file si aggiunge questo, ovunque?
systemovich,

5
@Geoffrey si. se non è già lì, puoi metterlo ovunque. tuttavia, di solito inserisco tutte le direttive "personalizzate" nella parte inferiore del file per una serie di motivi (ignorando le direttive preesistenti, l'ordine e solo per vedere facilmente cosa ho cambiato dalla configurazione delle scorte).
MartinodF,

6
Aggiungi AddDefaultCharset utf-8 a .htaccess - ha funzionato per me. (se non si ha accesso a httpd.conf)
richardwhitney,

Fa distinzione tra maiuscole e minuscole?
Mike Stoddart,

6
Poiché questa risposta è del 2009: in Ubuntu 18, cambi questa configurazione in/etc/apache2/conf-available/charset.conf
WoodrowShigeru,

55

Aggiungi questo al tuo .htaccess:

IndexOptions +Charset=UTF-8

Oppure, se si dispone dei diritti di amministratore, è possibile impostarlo a livello globale modificando httpd.confe aggiungendo:

AddDefaultCharset UTF-8

(È possibile utilizzare AddDefaultCharsetin .htaccesstroppo, ma non influenzerà elenchi di directory di Apache-generati in questo modo.)


4
Questa è un'ottima soluzione e meno invasiva rispetto alla modifica del file httpd.conf.
Andrew Swift,

1
sul mio server, .htaccesspuò influire anche su tutte le sottodirectory, probabilmente apache cercherà qualsiasi .htaccessdirectory superiore fino alla directory principale della cartella del sito Web
nonopolarità

2
Sì, è così che .htaccessfunziona su tutti i server: influisce anche su tutte le sottodirectory. Tuttavia, le pagine di elenco di directory generate da Apache non possono essere forzate su UTF-8 utilizzando .htaccess(AFAIK).
Mathias Bynens,

9
Si noti che la modifica delle impostazioni a livello di server tramite .htaccessfile è generalmente una pratica errata. I bug diventano più difficili da tracciare quando le impostazioni del server sono distribuite su vari file. C'è anche un leggero aumento delle prestazioni: con ogni file richiesto, Apache deve leggere il .htaccessfile della directory e tutti i .htaccessfile delle directory principali. .htaccessdovrebbe pertanto essere utilizzato solo per le impostazioni specifiche di una directory (ad es. impedire l'accesso a una directory specifica) o quando non vi è assolutamente alcuna possibilità di ottenere i diritti di amministratore.
Robbert,

2
Dopo aver votato, IndexOptions + Charset = UTF-8 ha fatto il trucco per me, grazie!
mTorres,

28

Vedi Direttiva AddDefaultCharset , Direttiva AddCharset e questo articolo .

AddDefaultCharset utf-8

Ma devo usare i caratteri cinesi di tanto in tanto. In precedenza, ho tradotto caratteri cinesi in codice Unicode e li ho inclusi nel documento usando l' &#hack. Ma è utile solo per pagine con pochi caratteri.

C'è un modo migliore per farlo: codificare le informazioni sui set di caratteri nel nome del file e apache produrrà l'intestazione di codifica corretta in base a ciò. Ciò è possibile grazie alle AddCharsetrighe nel file conf, come la riga seguente:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Quindi se hai un file i cui nomi finiscono .html.utf8, apache servirà la pagina come se fosse codificata in UTF-8 e scaricherà di conseguenza la direttiva di codifica dei caratteri corretta nell'intestazione.


23

Posizionare AddDefaultCharset UTF-8in /etc/apache2/conf.d/charset. In effetti, è già lì. Devi solo decommentarlo rimuovendo il precedente #.


2
Non esiste un file come /etc/apache2/conf.d/charset. È un file di inclusione personalizzato della tua distribuzione. Come qualsiasi altro file che non lo è httpd.conf.
Evi1M4chine,

1
È /etc/apache2/conf-enabled/charset.confsulla mia distribuzione (Ubuntu 16.4). Inoltre non ha funzionato.
Alator

23

In .htaccess aggiungi questa riga:

AddCharset utf-8 .html .css .php .txt .js

Questo è per quelli che non hanno accesso al file conf del loro server. È solo un'altra cosa da provare quando altri tentativi falliscono.

Per quanto riguarda i problemi di prestazioni riguardanti l'uso di .htaccess non ho visto questo. I miei tempi tipici di caricamento della pagina sono 150-200 mS con o senza .htaccess

A che serve il rendimento se la tua pagina non viene visualizzata correttamente. La maggior parte dei server condivisi non consente l'accesso dell'utente al file di configurazione, che è il posto preferito per aggiungere un set di caratteri.


Non posso spiegare, ma solo questa soluzione funziona per me. Ecco perché un grande +1
Skalár Wag il

1
Come accennato in precedenza da @Robbert - se non stai già utilizzando i .htaccessfile, non iniziare ora. Esistono motivi amministrativi e prestazionali per cui questa è una cattiva idea (tm)
Signal15

Quando non si includono le estensioni AddCharset viene applicato a Tipi di contenuto text / html e text / plain.
Ho frainteso il

Questo ha funzionato per me mentre tutti i tendalini sopra non lo hanno fatto. +1
Alator

La risposta accettata riguarda solo tex / html e text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV

10

Non sono sicuro di avere accesso alla configurazione di Apache (httpd.conf) ma dovresti essere in grado di impostare una direttiva AddDefaultCharset. Vedere:

http://httpd.apache.org/docs/2.0/mod/core.html

Cerca il modulo mod_mime.c e assicurati che sia impostato quanto segue:

AddDefaultCharset utf-8 

o i documenti Apache 1.x equivalenti ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Tuttavia, questo funziona solo quando "il tipo di contenuto della risposta è text / plain o text / html".

Dovresti anche assicurarti che anche le tue pagine abbiano un set di caratteri. Vedi questo per maggiori informazioni:

http://www.w3.org/TR/REC-html40/charset.html


8

Questo non è testato ma probabilmente funzionerà.

Nel tuo file .htaccess inserisci:

<Files ~ "\.html?$">  
     Header set Content-Type "text/html; charset=utf-8"
</Files>

Tuttavia, ciò richiederà mod_headers sul server.


Questo ha funzionato per me, mentre la soluzione scelta non ha funzionato. Grazie! In effetti, non ho nemmeno dovuto avvolgerlo nei <Files>tag.
Geremia,

8

Per completezza, su Apache2 su Ubuntu, troverai il set di caratteri predefinito in charset.conf in conf-available.

Rimuovi il commento dalla linea

AddDefaultCharset UTF-8

3

Laddove tutti i file HTML si trovano in UTF-8 e non hanno meta tag per il tipo di contenuto, sono stato in grado di impostare solo il valore predefinito necessario per inviare questi file da Apache 2.4 aggiungendo entrambe le direttive:

AddLanguage ru .html
AddCharset UTF-8 .html

3

Solo un suggerimento se hai nomi di file lunghi in utf-8: per impostazione predefinita saranno accorciati a 20 byte, quindi può capitare che l'ultimo carattere possa essere "tagliato a metà" e quindi non riconosciuto correttamente. Quindi potresti voler impostare quanto segue:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth L'impostazione impedirà di abbreviare i nomi dei file, rendendoli correttamente visualizzati e leggibili.

Come già menzionato da altri utenti, questo dovrebbe essere aggiunto in httpd.confo apache2.conf(se si dispone dei diritti di amministratore) o in .htaccess(in caso contrario).


2

Lascialo vuoto: 'default_charset' in WHM :::::: default_charset =''

ps - In WHM vai --------) Home »Configurazione del servizio» Editor di configurazione PHP ----) fai clic su "Modalità avanzata" ----) trova "default_charset" e lascialo vuoto ---- solo niente, non utf8, non ISO


0

Nel mio caso aggiungere a .htaccess

AddDefaultCharset off
AddDefaultCharset windows-1252
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.