Při vývoji jednoho projektu jsem narazil na problém s diakritikou e-mailů odesílaných funkcí mail. Přestože měla zpráva nastaveno správné kódování obsahu i MIME type, diakritika v předmětu byla nečitelná.
Nakonec jsem přišel na to, že kódování obsahu se týká jen těla zprávy. Kódování předmětu se musí definovat zvlášť.
Stačí k tomu tato formulka:
"=?utf-8?B?".base64_encode($subject)."?="
Celý skript pro odesílání mailů pak vypadá nějak takto:
$headers = "MIME-Version: 1.0n";
$headers .= "Content-type: text/html; charset=utf-8n";
$headers .= "Content-Transfer-Encoding: base64n";
$headers .= "From: "Mojeprani" n";
$text = base64_encode($text);
$subject = "=?utf-8?B?".base64_encode($subject)."?=";
mail($to,$subject,$text,$headers);
Takto odeslaný mail má již diakritiku v pořádku.
Ne vsechny (tj. stare) servery / clienti podporuji standard MIME, protoze puvodni navrh emailovych sluzeb pocital jen se 7b na znak (coz vylucuje narodni diakritiku) -> proto je lepsi posilat emaily v bezdiakriticke forme.
Jinak kodovani base64 je vhodne pro prenost binarnich dat (totiz pro zvyseni spolehlivosti bezchybneho doruceni se zvysuje redundance dat). Text je vhodnejsi posilat s kodovanim quoted-printable, ktery teda take zvysuje redundanci, ale ne tak rychle a navic znaky z horni poloviny ASCII tabulky nahrazuje jejich hodnotou, napr. "ř" -> "=F8", kdezto base64 by z "Dobry den, jak se mate?" udela neco jako "0M84GxGEAAAAAAAAAAAAAAAPg//CQAAAA" a tomu porozumi uz jen malo kdo :D (pro duvod tohoto argumentu viz prvni odstavec)