【问题标题】:Broken Accented Characters in a MailTo LinkMailTo 链接中损坏的重音字符
【发布时间】:2009-09-24 15:41:09
【问题描述】:

我正在尝试创建一个包含法语重音字符作为主题和电子邮件正文的 mailto 链接。对字符进行编码的 HTML 和 URI 都不起作用。这是我的代码:

<a href="mailto:%20?subject=ce%20titre%20est%20cass%C3%A9.&body=travaux%20deja!%20cesser%20d'%C3%AAtre%20t%C3%AAtu">SEND EMAIL</a>

没有 URI 编码也会出现同样的结果:

<a href="mailto:?subject=ce titre est cassé&body=travaux deja! cesser d'être têtu">SEND EMAIL</a>

不管我是怎么做的,新电子邮件都会以损坏的字符打开。 URI 编码的空格和换行符可以正常工作,但任何不是 ANSI 的东西都会被破坏。我应该注意,我正在测试 MS Outlook 2007 的英文和法文版本。有人知道如何让它工作吗?

【问题讨论】:

    标签: html utf-8 mailto diacritics


    【解决方案1】:

    在 IE 8 中它是一个设置选项。 工具 -> 选项 -> 高级。在 International 下选中“Use UTF-8 for mailto links”选项。

    在 Windows XP 下,默认情况下禁用此设置。 在 Windows 7 下默认启用。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      邮件标题中的所有内容(包括主题)都必须根据此 RFC 进行 MIME 编码,

      http://www.ietf.org/rfc/rfc2047.txt

      执行此操作并非易事,但您可以在大多数语言中找到处理它的代码。

      正确编码的文本如下所示,

      =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
      

      编辑:试试这个看看是不是你想要的,

      <a href="mailto:your@email.com?subject=%3d%3fISO-8859-1%3fB%3fY2UgdGl0cmUgZXN0IGNhc3Pp%3f%3d&Content-Type=text%2fplain%3b+charset%3dISO-8859-1&body=travaux%20deja!%20cesser%20d'%C3%AAtre%20t%C3%AAtu">SEND EMAIL</a>
      

      用您的地址替换电子邮件。

      【讨论】:

      • 在此示例中,OP 没有形成电子邮件。他正在形成一个mailto链接。该规范与他的上下文无关。
      • 请在投反对票之前阅读 RFC。这个 RFC 是关于标题的,而不是邮件正文。主题必须像这样编码才能正确显示在邮件代理中。
      • 我认为这是电子邮件代理的责任,而不是 html 页面。如果您也在 html 页面中对其进行编码,我认为您最终会得到一个双重编码的字符串。
      • 我真的认为 ZZ Coder 对哑剧类型有所了解。但是 Asaph 是正确的,这并不能回答我的问题。如何从 mailto 链接更改 mimetype?我不确定它是否可能。
      • 你的 html 页面的 mime-type 是什么?您可以像这样为整个页面指定一个字符集: Content-Type: text/html; charset=UTF8
      【解决方案3】:

      知道了!这可能是也可能不是 Microsoft Outlook/Entourage 中的错误。我将我的默认邮件阅读器更改为 Mail.app,它与 urlencoding 完美配合。 (也许)错误似乎只影响示例中的 2 个重音 e 字符之一。也许 Outlook/Entourage 没有正确处理 miltibyte UTF8 字符?

      【讨论】:

      • 我认为你是对的,请参阅我上面评论中的链接。 URL规范中似乎没有在电子邮件阅读器一侧指定操作。 Mail.app,可能只是为了国际可用性而“超越”。但如果 Outlook 2007 不能做到这一点,它就不够可靠,无法投入生产。除非我听说有一个神奇的 &charset=UTF-8 参数,否则这个参数已经死了。
      • 更详细的帖子在这里:stackoverflow.com/questions/974558/…
      【解决方案4】:

      例如,使用 mootools(但可能是另一个框架,甚至是“原始”javascript),我通常会这样做,并且它适用于 mac/pc 与主要浏览器/客户端:

      window.addEvent('domready', function(){
          //get the links to encode
          var links_to_encode = $$('#page ul li a');
      
          links_to_encode.each(function(link){
              //check if the link has an href
              var original_href = link.get('href');
              if(original_href){
                  //substitute it with the encoded version
                  link.set('href',encodeURI(original_href));
              }
          });
      });//fine domready
      

      再见!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        • 1970-01-01
        • 2017-12-14
        • 1970-01-01
        • 2010-12-15
        • 2012-03-08
        • 1970-01-01
        相关资源
        最近更新 更多