2013-02-21 125 views
1

我有一个PHP mail();函数的奇怪问题。PHP - 邮件() - 单引号对双引号

使用它像这样

$header = "MIME-Version: 1.0" . "\r\n"; 
$header .= "Content-type: text/html; charset=utf-8" . "\r\n"; 
$header .= "Content-Transfer-Encoding: quoted-printable" . "\r\n"; 
$header .= "Reply-To:" . $email . "\r\n"; 
$header .= "From: Kontaktformular <[email protected]>" . "\r\n"; 
mail("[email protected]", "Message from " . $name . " through your website!", $message, $header); 

一切正常。邮件得到发送,一切都编码正确,主题也没问题。

但是,当我改变单引号的双引号是这样的:

$header = 'MIME-Version: 1.0' . '\r\n'; 
$header .= 'Content-type: text/html; charset=utf-8' . '\r\n'; 
$header .= 'Content-Transfer-Encoding: quoted-printable' . '\r\n'; 
$header .= 'Reply-To:' . $email . '\r\n'; 
$header .= 'From: Kontaktformular <[email protected]>' . '\r\n'; 
mail('[email protected]', 'Message from ' . $name . ' through your website!', $message, $header); 

邮件仍然被发送,但没有设定主题。相反,它是

[email protected]

和特殊字符也被破坏了。那里发生了什么?

回答

4

单引号的文字字符串,没有变量被替换/扩展,并没有转义序列以外\'\\得到尊重。您编写代码的方式,您可以保留单引号,除非您要必须有双引号"\r\n"的换行符。

+0

\'和\\实际上 – leftclickben 2013-02-21 17:47:51

+0

@leftclickben呃,什么是丛集的。如果他们排除所有逃跑并且完成了它,情况可能会更好。答案已更新。 – Sammitch 2013-02-21 17:51:13

4

需要双引号才能放入特殊换行符("\r\n")。当您使用单引号时,它们不被视为换行符,而是将其视为文字文本。

PHP解释器将使用双引号评估材料,但它不会对单引号执行此操作。因此,最佳做法是在需要评估某些内容时使用双引号(如变量,无法连接时,或者换行符等特殊字符)。

1

请阅读使用说明书:

http://php.net/manual/en/language.types.string.php

单引号

要指定一个单引号,用反斜杠转义()。到 指定一个文字反斜杠,加倍(\)。 反斜杠的所有其他实例都将被视为文字反斜杠:这意味着您可能习惯使用的其他转义序列(如\ r或\ n)将按指定的字面顺序输出,而不是具有任何特殊含义。