2017-10-05 72 views
-1

邮寄地址链接我即逃避PHP

<a href="mailto:[email protected]?subject=<?php rawurlencode(Travels & Tours) ?>&body=this is body">link text</a> 

在我的PHP代码一个mailto链接的问题是当它出现在电子邮件客户端如Outlook中的主题行文本更改为Travels &amp; Tours

+4

你已经发布的代码是无效的PHP代码。请纠正这一点,否则,我们不一定知道你的问题是什么。 – MrWhite

回答

-1

使用html_entity_decode

<a href="mailto:[email protected]?subject=<?php html_entity_decode(Travels & Tours) ?>&body=this is body">link text</a> 
+0

用'html_entity_decode'替换'rawurlencode'后不出现文字 – DMP

+0

试试这个:link text

+0

这个我已经在尝试了,请仔细阅读这个问题。 – DMP

0

严格地说,你应使用urlencode()对URL参数值进行URL编码,而不是rawurlencode(),该编码用于对URL的URL路径部分进行编码。虽然这两个函数产生类似的结果,但有差异。网址的不同部分有不同的限制。值得注意的是(从你的例子),空间被编码为在URL参数值+,而他们被编码为在URL路径%20(虽然这并没有真正在大多数情况下均可)。

除了URL,以进行有效编码的请求的URL,你可能还需要HTML实体编码整个HTML属性,以使其有效的HTML(但是,HTML5是那么严格)。 (浏览器,然而,相当宽容,并且很可能会自动HTML实体编码是必要的。但是,这可能并不总是正确地运行和安全原因,URL,你应该确保你产生任何HTML已经被正确编码。)

所以,理想情况下,你应该做类似如下:

<?php 
$subject = urlencode('Travels & Tours'); 
$body = urlencode('body is body'); 
$url = htmlspecialchars("mailto:[email protected]?subject=$subject&body=$body"); 
?> 
<a href="<?=$url?>">link text</a> 

这将导致以下HTML:

<a href="mailto:[email protected]?subject=Travels+%26+Tours&amp;body=body+is+body">link text</a> 

但是,这可能仍然无法解决您的问题,并可能取决于浏览器/电子邮件c lient - 因为URL参数在被电子邮件客户端处理之前必须正确的HTML实体和URL解码。上面的工作对我来说很合适,但是您的原始示例也是如此(一旦PHP语法被更正)。

电子邮件客户端中,他们可以处理哪些相对简单,所以它通常是你需要搏斗的电子邮件客户端。就个人而言,我会避免在开头的电子邮件中使用&