我的php代码中有一个mailto链接,即
<a href="mailto:email@domain.tld?subject=<?php rawurlencode(Travels & Tours) ?>&body=this is body">link text</a>
问题是当它出现在电子邮件客户端时,例如outlook主题行文本更改为Travels & Tours
答案 0 :(得分:0)
严格地说,您应该使用urlencode()
对URL参数值进行URL编码,而不是rawurlencode()
,后者用于对URL的URL路径部分进行编码。虽然这两个函数产生相似的结果,但存在差异。 URL的不同部分具有不同的限制。值得注意的是(在您的示例中), spaces 在URL参数值中被编码为+
,而在URL路径中它们被编码为%20
(尽管这并不是&#39}在大多数情况下都非常重要。)
除了为了生成有效请求而对URL进行URL编码之外,您还可能需要对整个HTML属性进行HTML实体编码,以使其成为有效的HTML(但HTML5不那么严格)。 (然而,浏览器非常宽容,并且可能会根据需要自动对HTML实体进行编码。但是,这可能并不总是正常运行,出于安全考虑,您应该确保您生成的任何HTML都已正确编码。)
因此,理想情况下,您应该执行以下操作:
<?php
$subject = urlencode('Travels & Tours');
$body = urlencode('body is body');
$url = htmlspecialchars("mailto:email@domain.tld?subject=$subject&body=$body");
?>
<a href="<?=$url?>">link text</a>
这导致以下HTML:
<a href="mailto:email@domain.tld?subject=Travels+%26+Tours&body=body+is+body">link text</a>
但是,这可能仍然无法解决您的问题,并且可能依赖于浏览器/电子邮件客户端 - 因为在电子邮件客户端处理之前,URL参数必须是正确的HTML实体和URL解码。以上工作对我来说可以使用Gmail,但原始示例也是如此(一旦PHP语法得到纠正)。
电子邮件客户端在处理内容方面相对基础,因此通常需要与电子邮件客户端进行协商。就个人而言,我会避免在电子邮件主题中使用&
。
答案 1 :(得分:-1)
即
<a href="mailto:email@domain.tld?subject=<?php html_entity_decode(Travels & Tours) ?>&body=this is body">link text</a>