PHP mail()将一些字符更改为htmlentities?

时间:2014-11-27 07:35:50

标签: php email html-email html-entities html-encode

!位于电子邮件正文中的标记时,我的PHP mail()脚本会将某些电子邮件客户端(如hotmail)上的%21感叹号更改为!

这是我的剧本

$to = "myemail@outlook.com";
$subject = "Password Reset";
$body = "<a href=\"http://example.com/#!/page\">Link 1</a>
        <br><br>
        Without href: http://example.com/#!/page - regular text
    ";
$headers = "From: no-reply@example.com\r\n";
$headers .= "Reply-To: no-reply@example.com\r\n";
$headers .= "Return-Path: no-reply@example.com\r\n";
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
mail($to,$subject,$body,$headers);

因此,在上面的脚本中,!仅在链接时更改为%21,常规文本将其保留为/#!/,而不是将其转换为{{ 1}}

我如何解决此问题,以便它不会更改为/#%21/

1 个答案:

答案 0 :(得分:0)

某些字符已编码,因为它们不是有效的网址。在您的情况下,URL code points将替换为百分比编码的字节%