2013-02-21 102 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)將按指定的字面順序輸出,而不是具有任何特殊含義。