更正PHP语法和变量插值邮件()


Correct PHP syntax and variable interpolation mail()

我有这样的代码来发送电子邮件:

// create email body and send it - for a domain price offer 
$to = 'user@domain.com';
$email_subject = "$$price offer for $domain";
$email_body =   " $name is offering $$price for $domain 'n'n ".
        " Message: $message 'n'n ".
        " Contact: $email_address ";
$headers = 'MIME-Version: 1.0' . "'r'n";
//$headers .= 'Content-type: text/html; charset=utf-8' . "'r'n";
$headers .= 'From: Domain Parking <domainforsale@domain.com>' . "'r'n";
$headers .= 'Reply-To: ' . $email_address . "'r'n";
mail($to,$email_subject,$email_body,$headers);

注意$email_subject$email_body变量;我使用$$price来输出类似$12.34的内容。

这是个好主意吗?有更好的方法来完成同样的事情吗?

$foo = "bar"; 
echo "$$foo"; //prints $bar

就是这样。不过,使用这种语法会更易读:

echo '$' . $foo;

除此之外,您应该阅读http://php.net/manual/en/function.mail.php页除此之外,它还指定您应该使用'r'n来分隔标头,而您在一些地方使用'n'n

尽管它有效,但建议您执行以下操作之一:

$email_subject = '$' . $price . ' offer for ' . $domain;
$email_subject = sprintf('$%s price offer for %s', $price, $domain);
$email_subject = "'$$price offer for $domain";

顺便说一句,mail()可能会为您做到这一点,但您应该清理变量,以确保它们不包含换行符。

我更喜欢使用sprintf()进行格式化,如下所示:

// create email body and send it - for a domain price offer 
$to = 'user@domain.com';
$email_subject = sprintf("%s offer for %s", $price, $domain);
$email_body = sprintf("%s is offering %s for $domain 'n'n ", $name, $price)
            . sprintf(" Message: %s 'n'n ", $message)
            . sprintf(" Contact: %s ", $email_address)
            ;
$headers = 'MIME-Version: 1.0' . "'r'n";
//$headers .= 'Content-type: text/html; charset=utf-8' . "'r'n";
$headers .= 'From: Domain Parking <domainforsale@domain.com>' . "'r'n";
$headers .= 'Reply-To: ' . $email_address . "'r'n";
mail($to,$email_subject,$email_body,$headers);