Email subject met speciale characters of accenten

Emails versturen kan je eenvoudig doen met PHP en de mail() functie.

Een HTML email of emails met characters in een andere taal dan het Nederlands of met characters buiten het ASCII bereik is eenvoudig in te stellen:

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

Maar voor de subject van de email geldt dit niet. Dit komt omdat de subject een onderdeel is van de “headers”. En daar kan je enkel ASCII characters gebruiken.

Gelukkig is er een work-around dat toelaat niet-ASCII characters te tonen in een email subject.

De volledige uitleg kan je hier lezen: RFC 2047

De truc is het encoderen van de header op de volgende manier:

=?<charset>?<encoding>?<data>?=

En dan concreet in PHP:

$subject = '=?UTF-8?B?'.base64_encode($subject).'?=';

Maw, in bovenstaande geval maakt de subject gebruik van de UTF-8 character set.
Encoding = B, wat wil zeggen, volgens de “BASE64“encoding. Er is ook een Q wat voor “Quoted-Printable” staat.
base64_encode($subject)= de subject zelve (inclusief de speciale characters of accenten) dat encoded wordt tot een base64 string.

Deze truc had ik initieel hier gevonden: http://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/

 

Par Hasard

Ik ben 40+, met een gezonde internet verslaving. Gelukkig getrouwd en fiere vader van 2 dochters. Wil een kat in huis, maar mag niet. 🙁

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *