2013-11-10 42 views
0

我有這個PHP腳本發送電子郵件給我自己。在php中發送電子郵件 - r n不會分裂它

<?php 
try { 
    $to = "[email protected]"; 
    $subject = "Test Mail"; 
    $message = $_GET['mail']; 
    $from = "[email protected]"; 
    $headers = "From:" . $from; 
    mail($to,$subject,$message,$headers); 
    echo "Mail Sent."; 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 
?> 

正如你可以看到消息從URL抓起: /uploadscript.php?mail=test信息\ r \ NTEST消息2

但電子郵件當屬

Test MessageTest message 2 

是否有可能使它實際上它分解,因此僅供參考之際,

Test Message 
Test Message 2 

回答

0

只需添加:

function translateCharacters($str){ 
    return nl2br(str_replace("\\r","\r", 
      str_replace("\\n","\n", 
      str_replace("\\t","\t", 
      $str)))); 
} 
$message = translateCharacters($_GET['mail']); 

這將轉換\r\n\tCRLFTAB

+1

爲什麼使用這個&而不是'nl2br();'? –

+0

@DarylGill:不會將'「\\ n」'轉換爲'「\ n」',它會將'「\ n」'轉換爲「
\ n」。它不會完成整個工作,但值得添加。 –

+0

好吧。我剛剛運行'echo「這是一個\\ n的例子;''在一個測試頁面中,返回結果是:'這是一個\ n的例子'..從這個單獨的備份當我說'\\ n'是一個轉義的新換行符,用於在瀏覽器中用雙向引號顯示'\ n' –

0

- 如果你使用$ _GET作爲消息 - 這非常危險(想想你的站點的安全性)

無論如何:最簡單的方法是使用urlencoding來換行。

新線的進行urlencode是%0A

PHP已經支持urlencode()

$message = urlencode($_GET['mail']); 
0

1)如果直接使用從$ _GET值的值,你應該看看: urlencode();urldecode();

2)而不是製造新的功能,不要重新發明輪子。看看nl2br();