Odesílání mailů s diakritikou

Ze svých skriptů bych rád odesílal maily i s českými znaky s diakritikou. Když však funkci pro odesílání mailů př...


Ze svých skriptů bych rád odesílal maily i s českými znaky s diakritikou. Když
však funkci pro odesílání mailů předám český text, jsou české znaky při čtení
mailu v poštovním programu zkomolené.
Problém 7 bitů
Ač by si člověk rád myslel, že na konci 20. století nebude pro počítač
problémem nakládat s českými znaky, opak je pravdou.
Příčinou všech potíží je však člověk sám. Původně počítače podporovaly pouze
znaky anglické abecedy. Pro úsporu místa se používalo pouze 7bitové kódování, a
na více znaků proto ani nezbýval prostor. Později, s nástupem výkonnějších
počítačů a levnějších pamětí, se začalo používat kódování 8bitové. Ve druhé
půlce kódové tabulky pak byl prostor pro umístění českých znaků s diakritikou.
Bohužel vzniklo několik navzájem nekompatibilních způsobů, jak rozmístit české
znaky do kódové tabulky.
Trocha historie
V DOSu si oblibu získalo kódování bratrů Kamenických, které využívalo podobnost
některých semigrafických znaků s českými znaky. Český text tak šlo číst i na
starších grafických adaptérech a tiskárnách, které neuměly předefinovat
znakovou sadu.
Microsoft ve svých novějších verzích MS-DOSu přišel s vlastním kódováním CP
852. S nástupem Windows pak představil pro češtinu další vlastní kódování CP
1250. ISO 8859-2 je kódování přijaté jako standard mezinárodní standardizační
organizací ISO. Svého času se ještě používalo kódování KOI8-CS, které má kořeny
v RVHP. Vlastní kódování češtiny mají i počítače Macintosh. Situace zkrátka
není jednoduchá.
Při odesílání českých mailů stojíte přede dvěma problémy. Prvním problémem je,
že tělo mailu by mělo obsahovat pouze znaky s kódem 0 až 127 (tj. 7bitové
kódování). České znaky jsou ve všech kódováních reprezentovány znaky s kódem
větším než 127.
Druhým problémem je volba vhodného kódování. Dvě nejpoužívanější kódování jsou
dnes windows-1250 (to se používá ve Windows) a iso-8859-2 (standardní kódování,
používáno zejména na Unixu).
Máme MIME
Oba problémy můžete vyřešit použitím tzv. MIME. MIME je široce podporované
rozšíření formátu elektronických dopisů, které umožňuje přenášení různých druhů
dat (text, obrázky, zvuk, binární data).
Pokud potřebujete v těle dopisu přenášet 8bitová data (tedy i český text s
diakritikou), musíte ho překódovat jednou ze dvou metod, a to base64 nebo
quoted-printable. První z nich převádí trojici 8bitových znaků na čtveřici
7bitových. Quoted-printable převádí znaky s kódem větším než 127 na sekvenci
=xx, kde xx je kód znaku zapsaný v šestnáctkové soustavě.
Pokud tělo dopisu zakódujete jednou z těchto metod, musíte přidat k dopisu
hlavičku:
Content-Transfer-Encoding: base64
nebo
Content-Transfer-Encoding: quoted-printable
Protože používáte rozšíření MIME, musí se mezi hlavičkami objevit i definice
použité verze MIME:
MIME-Version: 1.0
Jako kódování češtiny byste měli používat iso--8859-2 (mj. i proto, že toto
kódování bude bez problémů čitelné i na platformě Windows a v produktech
Microsoftu typu MS Mailu či Outlooku). Text dopisu tedy musíte do tohoto
kódování převést. Většina tvůrců webových stránek však pracuje ve Windows, a
proto i stránky a skripty píše v kódování Windows.
Obě kódování se liší jen nepatrně. V PHP pro převod textu mezi kódováními
můžete s výhodou použít funkci StrTR(). Pokud máte text dopisu převeden do
správného kódování, musíte ještě přidat hlavičku, která určuje použité kódování
pro tělo dopisu:
Content-Type: text/plain; charset="iso-8859-2"
Příprava funkce
Nyní již znáte vše potřebné pro vytvoření správného mailu i s českým textem.
Poznamenejme ještě, že ve skriptovacím jazyce PHP máme k dispozici funkce
Base64_Encode() a IMAP_8Bit(), které překódují text metodou base64 nebo
quoted-printable.
Nyní nestojí nic v cestě definování funkce CZMail(), která se bude chovat
stejně jako Mail(), ale umožní vám odesílání mailů s českými texty.
<?
function CZMail($to, $subj, $text, $headers = "")
{ // převedení z windows-1250 do iso-8859-2 (je-li // potřeba) $text =
StrTr($text, "x8Ax8Dx8Ex9Ax9Dx9E", "xA9xABxAExB9xBBxBE"); //
překódování do Base64 $text = Base64_Encode($text); // přidání hlaviček
$headers .= "MIME-Version: 1.0n". "Content-Type: text/plain;
charset="iso-8859-2"n". "Content-Transfer-Encoding: base64n"; // odeslání
e-mailu Mail($to, $subj, $text, $headers);
}
?>
Nyní můžete bez problémů odesílat i maily s diakritikou:
CZMail("nekdo@nekde.cz", "Dopis", "Už můžu psát dopisy česky!!!");
Pokud vás problematika češtiny a počítačů zaujala, podívejte se na adresu
http://www.cestina.cz. Stránka je celá věnována problematice použití češtiny v
prostředí Internetu.

9 1556 / pahn









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.