ValueByName('Subject'); } $cases = [ // plain word, then a folded encoded word: the space stays "Traiter les =?utf-8?Q?vuln=C3=A9rabilit=C3=A9s?= de vos\r\n =?utf-8?Q?=C3=A9quipements?= : plan de =?utf-8?Q?rem=C3=A9diation?= et\r\n checklist =?utf-8?Q?sign=C3=A9e?=" => 'Traiter les vulnérabilités de vos équipements : plan de remédiation et checklist signée', // two encoded words split across lines: no space between them (RFC 2047 §6.2) "=?utf-8?Q?r=C3=A9pon?=\r\n =?utf-8?Q?se?=" => 'réponse', "=?utf-8?B?w6l0w6k=?=\r\n\t=?utf-8?B?IGZpbg==?=" => 'été fin', // encoded word, then a folded plain word: the space stays "=?utf-8?Q?r=C3=A9union?=\r\n demain" => 'réunion demain', // no encoding at all "Hello\r\n world" => 'Hello world', ]; foreach ($cases as $raw => $want) { $got = preg_replace('/\s+/', ' ', subject($raw)); check($got === $want, "got [{$got}], want [{$want}]"); } echo "header-unfold: ".count($cases)." checks OK\n";