Utf-8

Rövid összefoglaló, hogy mikor, mire érdemes figyelni a karakterkódolással kapcsolatban.

Ma már alapértelmezett, hogy honlapkészítéshez Utf-8-as kódolást használunk mindenhol. Valamikor az ezredforduló környékén az átállásról szóló cikkek még kuriózumnak számítottak. Ma viszont az a meglepő, ha valaki mégsem Utf-8-as kódolást használ. Ám mégis, előfordul, hogy egy-egy kezdő fejlesztő belefut olyan problémába, hogy nem megfelelően jelenik meg a honlapján a szöveg. Emiatt egy rövid összefoglalót készítettem, melyben összeszedtem, hogy hol, mit érdemes beállítani a helyes karakterkódoláshoz.

Nulladik lépésként meg kell említeni, hogy a fájlok, amelyekkel dolgozunk, legyenek Utf-8-as kódolásúak! Banális hiba, ám mégis a legtöbbször itt szokott elvérezni a kezdő fejlesztő. Itt egy olyan hiba is előfordulhat, hogy az úgynevezett Utf-8 BOM kódolást adunk meg, amelynek a lényege, hogy az adott fájl első pár byte-ja tartalmazza a kódolás típusát. Ez felesleges, illetve több esetben hibához is vezethet, így ennek használata kerülendő. A BOM-ról részletesebben az alábbi Wikipédia oldalon olvashatsz: https://en.wikipedia.org/wiki/Byte_order_mark

Apache

Amennyiben az Apache alapértelmezetten nem Utf-8-as kódolást használna, akkor a .htaccess fájlba az alábbi utasításokat tehetjük be, hogy a szerver a kéréseket mégiscsak ennek megfelelően szolgálja ki.

AddDefaultCharset utf-8
<IfModule mod_mime.c>
    AddCharset utf-8 .js
    AddCharset utf-8 .css
</IfModule>

HTML

Ugyanúgy, ahogy ma már nem érdemes nem Utf-8-as kódolást használni, nem érdemes nem HTML5-öt használni. A HTML5-ben alapértelmezett kódolás Utf-8, ennek ellenére a legtöbb fejlesztő beleteszi a forrásba a karakterkódolást.

<!DOCTYPE html><html><head>

<meta charset="utf-8">

CSS

Nem sűrűn írok a .css fájlokba kommentet, de néha előfordul. Nagyon ritkán az is előfordul, hogy ezekben a kommentekben ékezetek is vannak. Emiatt alapértelmezetten beteszem az elejére a kódolást, biztos ami biztos. Ékezetes fájlneveket még sosem használtam, elvi szinten ezeknek a fájloknak a helyes kezelésére is hasznos lehet az Utf-8-as kódolás megadása.

@charset "UTF-8";

MySql

Ma már a legtöbb MySql adatbázis szerveren az Utf-8 az alapértelmezett kódolás, így ez a lépés ki is hagyható lenne, ennek ellenére minden kapcsolódás után megadom, hogy Utf-8-at szeretnék használni.

$connect = mysqli_connect(...);
mysqli_set_charset($connect, 'utf8');

XML

Magam részéről sokkal jobban szeretek adatokat JSON alakban továbbítani, mint XML-ben. Ennek ellenére ebből a leírásból nem hiányozhat az XML, és benne az Utf-8-at tartalmazó deklaráció.

<?xml version="1.0" encoding="UTF-8"?>

shell_exec

Talán a legkevésbé ezzel találkozzunk, mivel a cikk célja az, hogy összeszedje az összes előfordulást, íme:

setlocale(LC_ALL, 'hu_HU.UTF-8');
putenv('LC_ALL=hu_HU.UTF-8');
echo shell_exec('locale charmap');

UTF-8 BOM

A cikk elején leírtam, hogy kerüljük az Utf-8 BOM-ot, ám mégis előfordulhat, ahol szükségünk lesz rá. Például, amikor PHP-ből CSV fájlt generálok, akkor a generált tartalom elejére beteszem a szükséges bájtokat, hogy az Excel is tudja, hogy most egy Utf-8 fájlról van szó.

echo pack('CCC', 0xef, 0xbb, 0xbf);

Zárszó

Végül csak annyi a végére, hogy ha mindenhol egységesen ugyanazt a karakterkódolást adjuk meg, akkor túl nagy gondunk nem lesz a hibás karakterekkel. Használjunk mindenhol Utf-8-at!