2010-08-03 122 views
1

有人可以請幫我用這個郵件腳本。PHP nl2br()基本功能

我只是試圖發送一個html電子郵件,部分消息來自用戶textarea,它放在\ r \ n中。

我似乎無法使用nl2br或任何其他類似的功能。下面的代碼不是我正在使用的,但仍然產生錯誤。

代碼:

$to = '[email protected]'; 

$subject = 'Test Subject'; 

$message_var_1 = 'test1 \r\n test2 \r\n test3'; 
$message = nl2br(" 
    <div> 
    <div>$message_var_1</div> 
    </div> 
"); 

$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= 'X-Mailer: PHP/'.phpversion() . "\r\n"; 

mail($to, $subject, $message, $headers); 
+0

錯誤消息? – 2010-08-03 11:50:46

+0

你需要更加細心。至少要確定你的問題與電子郵件無關。 – 2010-08-03 11:58:22

+1

@Guillaume Lebourgeois,我認爲他用「產生錯誤」的表達作爲「不起作用」的同義詞。可能根本沒有錯誤信息。 – 2010-08-03 12:00:44

回答

5
$message_var_1 = 'test1 \r\n test2 \r\n test3'; 

PHP解析\r\n僅在",內'沒有。所以nl2br在這裏不適用。

$message_var_1 = "test1 \r\n test2 \r\n test3"; 
$message = '<div> 
    <div>'.nl2br($message_var_1).'</div> 
</div>'; 

這應該工作。

+0

解決問題。謝謝!但是爲什麼php爲了用
替換它而必須「解析」\ r \ n?這似乎是不必要的......或者他們專門做這件事,以便你可以把單引號和排除它應用nl2br? – Derek 2010-08-03 12:15:01

+1

@Derek'nl2br'用一個
標籤和一個換行符替換換行符。它正在尋找換行符,而不是字面的'\ r \ n'(這是'''引號之間的窗口式換行符) - 這就是爲什麼需要解析'nl2br'才能工作。 – Maerlyn 2010-08-03 12:17:46

1

此字符串包含嵌入的換行符,因此您最終會得到一些不需要的<br/> s。

$message = nl2br(" 
    <div> 
    <div>$message_var_1</div> 
    </div> 
"); 

您可以:

$message = "<div>" . nl2br($message_var_1) . "</div>"; 

或者,它更容易使用<pre>標籤:

$message = "<pre>$message_var_1</pre>"; 
+2

'pre'標籤雖然通常被分配了一個'font-family:monospace',在大多數情況下它不是你想要的。 – NikiC 2010-08-03 12:01:48

-1

另一種方法是用定界符。

$message = <<<OUTPUT 
<div> some text 
    <div> some more text </div> 
</div> 
OUTPUT; 
$message = nl2br($message); 

手冊鏈接,定界符here