Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Special characters in UTF8 mailto: subject= link and Outlook

I'm in the last stages of re-coding a site that formally used iso-8859-1 character encoding, but now is UTF-8 throughout.

The problem is that the subject section of the mailto href link is not working with Outlook, when special characters are used. I get the usual garbled character representations, indicative of an obvious character encoding issue when the link is clicked and the new mail window pops up in outlook.

I've tried rawurlencode() to fix ths issue, but this doesn't seem to work with Outlook...

<a href="mailto:[email protected]?subject=<?=rawurlencode($subj);?>">send email</a>

So then thought, Outlook must insist on a different encoding, and tried utf-8 decoding the subject string first...

<a href="mailto:[email protected]?subject=<?=rawurlencode(utf8_decode($subj));?>">send email</a>

Bingo! Works great Outlook. But now fails in everything else :(

I can't find a solution that works accross all mail clients.

It worked fine across all mail clients when the whole page was displayed in iso-8859-1. But not when the page content is utf-8.

Unfortunately the client wants to retain this direct email link, despite having a functioning mail form directly beneath it!

Is there a happy solution to this?

like image 556
Richt222 Avatar asked Jun 19 '12 16:06

Richt222


People also ask

Why do I see strange characters in outlook?

If you see strange characters in a received message, click the Encoding button on the ribbon and select a different one, like Unicode (UTF-8). If this makes the text display properly, you may find it best to leave Use default encoding for all incoming messages not selected.

How do I add a custom subject to a mailto link?

If you want to add a subject to that e-mail add ? subject=<subject> to the mailto tag. For example, the complete tag would look similar to the example below. You can also add body text by adding &body=body to the end of the tag, as shown in the example below.


2 Answers

If you use utf-8 try this:

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>
like image 125
Deyan Sarahoshev Avatar answered Oct 09 '22 15:10

Deyan Sarahoshev


The reason the subject line is sometimes garbled is because when you specify an encoding, it doesn't apply to the email header. Your subject line is in the email header. Here's a function to apply UTF8 encoding on the subject line:

function EncodeSubject($_subject)
{
    $encodedSubject = str_replace("&quot;", '"', $_subject);
    $encodedSubject = preg_replace('/[^x09\x20-\x3C\x3E-\x7E]/e', 'sprintf("=%02X", ord("$0"));', $encodedSubject);
    $encodedSubject = str_replace(' ', '_', $encodedSubject);
    return ="?utf-8?q" . $encodedSubject . "?=";
}
like image 28
Dave Avatar answered Oct 09 '22 17:10

Dave