15

我正处于重新编码一个正式使用 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>

答对了!工作伟大的前景。但现在其他一切都失败了:(

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

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

不幸的是,客户希望保留这个直接的电子邮件链接,尽管它下面有一个正常工作的邮件表单!

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

4

3 回答 3

10

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

<?php $subject = "=?UTF-8?B?" . base64_encode($subject) . "?="; ?>
于 2012-07-26T14:26:32.373 回答
1

主题行有时出现乱码的原因是,当您指定编码时,它不适用于电子邮件标题。您的主题行位于电子邮件标题中。这是一个在主题行上应用 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 . "?=";
}
于 2012-07-16T19:12:53.800 回答
-1

您需要检查以下内容

1) HTML 代码

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

2) IE 视图的浏览器设置 --> 编码 --> Unicode (UTF-8)

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

于 2012-06-20T05:36:41.867 回答