UTF8中的特殊字符mailto:subject = link和Outlook

时间:2012-06-19 16:33:18

标签: php email encoding utf-8 outlook

我正处于重新编码正式使用iso-8859-1字符编码的网站的最后阶段,但现在整个版本都是UTF-8。

问题是当使用特殊字符时,mailto href链接的主题部分不能与Outlook一起使用。我得到了通常的乱码字符表示,指示单击链接时出现明显的字符编码问题,并在Outlook中弹出新的邮件窗口。

我已经尝试过rawurlencode()来修复这个问题,但这似乎不适用于Outlook ......

<a href="mailto:blah@blah.com?subject=<?=rawurlencode($subj);?>">send email</a>

然后想到,Outlook必须坚持不同的编码,并尝试首先解码主题字符串的utf-8 ......

<a href="mailto:blah@blah.com?subject=<?=rawurlencode(utf8_decode($subj));?>">send email</a>

宾果!很棒的Outlook。但现在其他一切都失败了:(

我找不到适用于所有邮件客户端的解决方案。

当整个页面显示在iso-8859-1中时,它在所有邮件客户端上运行良好。但不是当页面内容是utf-8时。

不幸的是,客户希望保留此直接电子邮件链接,尽管其下方有正常运行的邮件表单!

对此有一个快乐的解决方案吗?

3 个答案:

答案 0 :(得分:9)

如果你使用utf-8试试这个:

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>

答案 1 :(得分:0)

主题行有时出现乱码的原因是,当您指定编码时,它不适用于电子邮件标题。您的主题行位于电子邮件标题中。这是在主题行上应用UTF8编码的功能:

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 . "?=";
}

答案 2 :(得分:-1)

您需要检查以下内容

1)HTML代码

<meta contentType="text/html; charset=UTF-8"/>

2)IE的浏览器设置 查看 - &gt;编码 - &gt; Unicode(UTF-8)

3)内容类型/ MIME类型应为“ application / x-www-form-urlencoded