Karakterkészletre vonatkozó beállítás a .htaccess fájlban

Kérdés

Hogy használhatom a .htaccess parancsait, hogy az Apache szerver különleges kódolással küldje a fájlokat?

Háttér

Fontos megbizonyosodnunk, hogy az információ, amit a szerver elküld a karakterkódolásról, megfelelő-e, mivel a HTTP fejlécében elküldött adatok felülírják a dokumentumban meghatározott kódolást.

Sok Apache szerver van alapértelmezésben úgy konfigurálva, hogy az ISO-8859-1 (Latin-1) kódolást használja. Ebben a leírásban azt feltételezzük, hogy ettől eltérő kódolást szeretne használni. (Hogy melyik kódolás a legmegfelelőbb, a Choosing & applying a character encoding című leírásunkban megtekintheti.)

A következő példa egy HTTP fejlécet mutat meg, ami a fájllal együtt elküldésre kerül a böngészőnek. Ebben az esetben a karakterkódolási információt a Content-Type fejléc tartalmazza, alulról a második sorban.

HTTP/1.1 200 OK
Date: Wed, 05 Nov 2003 10:46:04 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
Content-Location: CSS2-REC.en.html
Vary: negotiate,accept-language,accept-charset
TCN: choice
P3P: policyref=http://www.w3.org/2001/05/P3P/p3p.xml
Cache-Control: max-age=21600
Expires: Wed, 05 Nov 2003 16:46:04 GMT
Last-Modified: Tue, 12 May 1998 22:18:49 GMT
ETag: "3558cac9;36f99e2b"
Accept-Ranges: bytes
Content-Length: 10734
Connection: close
Content-Type: text/html; charset=utf-8
Content-Language: en

A példában a Content-Type fejléc kifejezi a MIME típusát a fájlnak és a karakterkódolást. A MIME típus meghatározza a küldött fájl formátumát. A HTML fájlok általában "text/html"-ként kerülnek elküldésre. A karakterkódolása (vagy 'karakterkészlete') a fájlnak UTF-8.

Ha szeretné megtanulni, hogy hogyan kell megnézni a HTTP fejlécét egy fájlnak, olvassa el HTTP fejlécek vizsgálata című leírásunkat.

A fájlok az Apache szerveren alapértelmezett karakterkódolással kerülhetnek elküldésre, ami összeütközésbe kerülhet a fájlban meghatározott kódolással. A szerver által küldött kódolás lehet a rendszeradminisztrátor által beállított is vagy különféle Apache utasítások eredménye. Előfordulhat olyan beállítás is, hogy a kódolási információt nem küldi el a szerver.

Ha a szerver úgy van beállítva, hogy lehetővé tegye a felhasználók számára a .htaccess fájl használatát, felülírhatjuk az alapértelmezett beállításokat . Ez a leírás megmutatja, hogyan.

Válasz

Számos különféle helyzet lehetséges, amit nem árt megjegyeznünk. Elsőként az azonos kiterjesztésű fájlokra vonatkozó alapértelmezett beállítást szeretnénk megváltoztatni egy mappában. Vagy esetleg csak egy fájlnak szeretnénk vagy csak néhánynak. Ezeket az opciókat most mind kitárgyaljuk.

A példánkban az feltételezzük, hogy a szerverbeállítás ISO-8859-1-et használ, de ezt meg szeretnénk változtatni UTF-8-ra.

Releváns ez a válasz?

A cikk inkább tartalomszerkesztőknek készült, nem a rendszeradminoknak. A szerver alapértelmezett kódolásának beállításával ez a cikk nem foglalkozik.

Ez az tanács csak akkor hasznos az Ön részére, ha a dokumentumának a karakterkódolását a HTTP fejlécen keresztül szeretné meghatározni. Néhány esetben ezt nem szeretné.

Vegye figyelembe, hogy ez a leírás feltételezi, hogy a szerver engedélyezi a .htaccess fájlok használatát és az alább szereplő utasítás működnek a .htaccess fájlokban. Ha nem biztos a dolgában, lépjen kapcsolatba a szerver üzembentartójával.

Ügyeljen arra is, hogy néhány esetben a szerver a fájlok kiterjesztésével határozza meg a karakterkódolást, például "pelda.html.utf8", ahol a .utf8 a karakterkódolást jelzi.

Ha ezek a kísérletek kudarba fulladnak, olvassa el az Apache útmutatót (a linkek megtalálja) vagy beszéljen a szerver adminisztrátorral.

Meghatározás a kiterjesztés alapján

Használjuk az AddCharset utasítást, hogy a karakterkódolás az összes adott kiterjesztésű fájlra vonatkozzon a könyvtárban és annak alkönyvtáraiban. Például ahhoz, hogy az összes .html kiterjesztésű fájlt UTF-8-ban küldjön el a szerver, nyissuk meg a .htaccess-t és írjuk bele a következő sort:

AddCharset UTF-8 .html

A kiterjesztés meghatározható a ponttal is és anélkül is. Akár több kiterjesztést is megadhatunk ugyanebben a sorban. Ez működik akkor is, ha olyan fájlneveink vannak mint például pelda.hu.html vagy pelda.html.en.

A példa eredményeként a HTTP Content-Type fejléc a következőt fogja tartalmazni:

Content-Type: text/html; charset=UTF-8

Megjegyzés: Minden, a megadott kiterjesztéssel rendelkező fájl, ami az adott könyvtárban és azok alkönyvtáraiban található, UTF-8-ban lesz elküldve. Ha valamilyen oknál fogva egy fájlt más kódolással szeretne felruházni, további utasításokkal ezt megteheti.

Megjegyzés: A karakterkódolást köthetjük bármilyen fájlkiterjesztéshez is. Például ha van két különböző nyelvű fájlunk, pelda.en.html és pelda.ja.html, amelyekből a .ja kiterjesztésűt UTF-8-ban szeretnénk tálalni, akkor azt az alábbi sorral tehetjük meg:

AddCharset UTF-8 .ja

Mindazonáltal a legjobb megoldás az lehet, ha a szerver alapértelmezett beállítása UTF-8 vagy az összes fájl az új könyvtárakban UTF-8-ként kerül kiszolgálásra.

Megjegyzés: Lehetséges ugyanezt a hatást elérni az AddType utasítással, bár ez a karakterkódolást és a MIME típust is meghatározza egyszerre. A legmegfelelőbb döntés attól függ, hogy hogyan használjuk a kiterjesztéseket a tartalom meghatározásánál. Ha például különböző kiterjesztésekkel fejezzük ki a dokumentum típusát és karakterkódolását, ez a módszer kevésbé megfelelő.

AddType 'text/html; charset=UTF-8' html

Alkalmi beállítások

Most feltételezzük azt, hogy csak egy fájlt szeretnénk egy nagy könyvtárból UTF-8-ként elküldeni a szerverrel. Ez a fájlunk a pelda.html lesz. Nyissuk meg a .htaccess fájlt egy formázás nélküli szövegszerkesztőben és írjuk bele a következőt:

<Files "example.html">
AddCharset UTF-8 .html
</Files>

A példában itt belehelyeztük az utasítást egy olyan meghatározásba, ami azonosítja az adott fájlt, amely minket érint. Ha szükséges, van egy alig eltérő parancs, ami a reguláris kifejezések használatával határozza meg a kérdéses fájlokat.

Megjegyzés: Az AddType vagy ForceType utasítás segítségével elérhetjük ugyanezt a hatást, bár ez meghatározza a karakterkódolás mellett a MIME típust is.

<Files "example.html">
ForceType 'text/html; charset=UTF-8'
</Files>

Megjegyzés: Bármilyen fájl, aminek ugyanez a neve és az adott könyvtár valamelyik alkönyvtárában megtalálható, ugyanúgy UTF-8-ként lesz elküldve, hacsak nem hozunk létre egy utasítást az adott könyvtárhoz.

Összetettebb esetek

Amikor két kiterjesztési szabály érvényesül egy dokumentumra, a kiterjesztések sorrendje a fontos.

AddCharset UTF-8 .utf8
AddCharset windows-1252 .html

A 'pelda.utf8.html' windows-1252 kódolásban lesz elküldve és a 'pelda.html.utf8' pedig UTF-8-ban.