【问题标题】:PHP mail() screwing up HTML href'sPHP mail() 搞砸了 HTML href
【发布时间】:2010-11-08 22:01:17
【问题描述】:

我在 PHP 脚本中有一个 mail() 函数。它可以很好地发送 HTML - 标头设置正确。然而,不正确的是 HREF 的表示形式——它们在 Thunderbird 中出现的都是乱码。

这是发送的内容:

<a href='/index.php?page=blahdeblah'>Click</a>

但是收到的是这样的:

Click</index.php?page=blahdeblah>

请注意链接文本在标记之前,没有结束标记(即使原始 PHP 字符串中包含一个 IS)

我使用的标题是这样的:

$headers = 'From: noreply@' . $url_short . "\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

(使用了一些 PHP 变量)

谁能帮忙解决这个奇怪的问题?

【问题讨论】:

  • 如果不出意外,链接到/index.php 是不可能的。尝试使用绝对 URL。这些链接在其他电子邮件客户端中是否有效?
  • 我觉得奇怪的是引号也被去掉了。尝试使用双引号 <a href="/index.php.php?page=blahdeblah">Click</a> 进行测试,看看它是否做同样的事情?
  • @stealthyninja - 我用双引号试过没有用,但是谢谢:)
  • @ceejayoz - 谢谢!使用 /index.php 我真是太愚蠢了——电子邮件客户端不知道要使用哪个服务器!非常感谢!

标签: php html email formatting


【解决方案1】:

尝试将您的锚标记更改为:

<a href="http://www.domain.com/index.php?page=blahdeblah">Click</a>

  • 为链接添加完整的域 URL 前缀
  • 将 href 属性括在双引号中而不是单引号中(HTML 属性应始终使用双引号,即使允许使用单引号)

【讨论】:

  • “应该”是双引号的任何特殊原因?它更常用,但规范同样允许。
  • 根据我的经验,将 html 属性括在单引号中并不总是适用于所有浏览器/电子邮件客户端。我不知道发生这种情况的确切原因,但我猜这是因为不同的语言对单引号和双引号的解释不同。在这种情况下,单引号可能会弄乱 PHP mail() 函数(正如 Resorath 指出的那样),该函数构造了要在电子邮件中发送的最终消息。
  • 这很好用——我没有使用 http:// 路径。至于单引号和双引号,那是因为它们在 PHP 字符串中。不过,我会更改它们以保持兼容性。
【解决方案2】:

如果您检查消息的来源并且它看起来正确,那么可能是 Thunderbird 显示不正确。如果您在电子邮件的来源中看到错误,则可能是您的 PHP 脚本有问题。

【讨论】:

    【解决方案3】:

    ceejayoz 提到了它,但是:链接到相对 URL 不会像您预期的那样工作,并且可能是问题的原因。如果这不能解决它,看看它是否也发生在其他读者身上。

    【讨论】:

    • 在@ceejayoz 上方查看我的评论。谢谢!
    【解决方案4】:

    你能展示你的整个 mail() 调用吗?这可能只是单引号使用不当造成的问题。

    【讨论】:

    • 不是,但是谢谢。问题不在于使用整个 URL(domain.com 位),但无论如何感谢 :)
    猜你喜欢
    • 2012-09-11
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 2012-06-08
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多