我正处于重新编码正式使用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时。
不幸的是,客户希望保留此直接电子邮件链接,尽管其下方有正常运行的邮件表单!
对此有一个快乐的解决方案吗?
答案 0 :(得分:9)
如果你使用utf-8试试这个:
<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>
答案 1 :(得分:0)
主题行有时出现乱码的原因是,当您指定编码时,它不适用于电子邮件标题。您的主题行位于电子邮件标题中。这是在主题行上应用UTF8编码的功能:
function EncodeSubject($_subject)
{
$encodedSubject = str_replace(""", '"', $_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 ”