【问题标题】:Special characters in UTF8 mailto: subject= link and OutlookUTF8 mailto 中的特殊字符:subject= link 和 Outlook
【发布时间】:2012-07-26 22:26:32
【问题描述】:

我正处于重新编码网站的最后阶段,该网站正式使用 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 时则不然。

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

有什么好的解决办法吗?

【问题讨论】:

  • 您希望 Quoted Printable 的 Q 变体用于“主题”标题​​(或 Base64 的 B 变体,如果不使用 7 位 ASCII 的超集)。请参阅 MIME RFC。
  • 我认为正在使用 Q 变体。单词“véhicule”在 mailto 链接 url 中转换为“v%C3%A9hicule”。由于它是一个 URL,这将等同于邮件客户端的“v=C3=A9hicule”。但到达 Outlook 时显示不正确。我认为这是因为 Outlook 需要 iso-8859-1 编码(其中“é”将是“=E9”。但是,这在所有其他客户端中都不起作用。

标签: php email encoding utf-8 outlook


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您需要检查以下内容

      1) HTML 代码

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

      2) IE浏览器设置 查看 --> 编码 --> Unicode (UTF-8)

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

      【讨论】:

      • 1 和 2 都证明是积极的。不过我不确定3。为什么或什么应该设置为该内容/MIME 类型?这不是表格,所以我有点困惑。
      猜你喜欢
      • 1970-01-01
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2018-08-11
      相关资源
      最近更新 更多