【问题标题】:Avoid space change into plus sign in iPhone from mailto link避免从mailto链接将空格更改为iPhone中的加号
【发布时间】:2021-05-19 06:51:00
【问题描述】:

我有一个呈现 mailto: 链接的 php 代码

echo "<a href='mailto:?'". http_build_query([
   'subject' => 'this is a subject',
   'body' => 'this is a body',
])."'>Link</a>";

在我的桌面浏览器中,当我单击链接时,浏览器会转到 GMail,并且邮件正文会很好地呈现。

但是当我使用 iPhone 时,撰写应用程序会显示“+”而不是空格。

我怎样才能避免这种情况?

【问题讨论】:

  • 重写撰写应用程序。或者告诉苹果。
  • 所以真的没有解决办法吗?
  • 不要对你的字符串进行 URL 编码(不要使用http_build_query())——那样你的空间将变为 %20,我认为 Apple 会处理它,最终结果将是相同的。

标签: php


【解决方案1】:

这是标准的 URI 代码。预计空间将转变为空间以外的其他东西。最常见的字符是“+”,有些人更喜欢使用 %20。

当您解码 URI 时,它会自动将“+”替换回空格。所以你的代码可能缺少那个调用...

你可能想看看这个函数:

http://us1.php.net/manual/en/function.urldecode.php


根据scrowler的评论,试着用%20代替空格看看会发生什么:

echo "<a href='mailto:?'". http_build_query([
   'subject' => 'this%20is%20a%20subject',
   'body' => 'this%20is%20a%20body',
])."'>Link</a>";

【讨论】:

  • 是 iPhone 应用程序没有对字符串进行解码 - 我们应该要求 Apple 将其添加进去吗?
  • 哦...所以通过使用 %20 而不是空格更改代码,它可能会按预期工作...
  • echo '&lt;a href="mailto:?subject=this is a subject&amp;body=this is a body"&gt;Link&lt;/a&gt;(字面意思)实际上是我建议的,浏览器自动将空格编码为 %20。
  • scrowler,好吧......也许你可以写下你自己的答案 8-) 但我现在明白你的意思了,http_build_query() 将添加+。使用%20,它可能会将其更改为%2520...
  • @PetraBarus,你明白 scrowler 的提议吗?他的解决方案应该有效。
【解决方案2】:

要构建与 Apple 邮件兼容的 mailto http 查询字符串,并且 将空格显示为 + 加号,您需要在 http_build_query 函数中使用 encoding_type 参数并设置将其设置为常量PHP_QUERY_RFC3986,以便使用%20 而不是+ 对空格进行编码。

构建 mailto 查询字符串:

$mailToParams = http_build_query(
    [
        'subject' => "The Subject!",
        'body' => "Here's the body of the message. \n\nAdd in a couple new lines."
    ],
    null,
    '&',
    PHP_QUERY_RFC3986
);

将其添加到您的链接中:

<a href="mailto:info@example.com?<?php echo $mailToParams; ?>">Mail Me</a>

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 2015-07-23
    • 2019-02-05
    • 2011-10-12
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多