2012-07-13 112 views
3

情況如下。我在MySQL中存儲了一個純文本電子郵件,其中包含換行符\r\n。當我的php腳本需要發送郵件時,它首先填寫sprintf的一些參數,然後郵件將與標準mail()函數一起發送。來自MySQL的純文本電子郵件在php

我遇到的問題是,電子郵件客戶端(我的例子中的雷鳥)顯示這些換行符而不是解釋它們。

爲了測試我的腳本,我在郵件中硬編碼了一個句子。當我這樣做時,郵件被正確解釋。我的第一個嘗試是MySQL逃避反斜槓,所以我試圖做一個str_replace("\\\\", "\\", $str),但這沒有幫助。

我顯然做出了錯誤的假設或愚蠢的錯誤,但我沒有看到它。可能是什麼問題呢?

+2

爲什麼不打印查詢的結果集,並確切地看到mysql返回的結果? – Razvan 2012-07-13 10:48:24

+0

我已經完成了一個print $'result ['message']',並且在瀏覽器中沒有任何內容被轉義。 – 2012-07-13 10:53:00

+1

然後,顯然mail()函數會跳過你的特殊字符 – Razvan 2012-07-13 10:54:43

回答

1

試圖取代它像這樣str_replace函數( '\ n \ r', 「\ n \ r」);如果\ n \ r字符作爲四個獨立字符保存在您的信息中,它可能會解決您的問題。如果您使用例如phpmyadmin輸入了它們,它們將按照您的預期保存爲4個字符而不是2個字符。

希望它有幫助!

+0

謝謝你解決了這個問題。我確實在phpMyAdmin中輸入了測試郵件。 – 2012-07-13 11:45:08

+0

請注意,如果您在單引號之間放置轉義字符'',它們將不會被轉義。如果你把它們放在雙引號之間,它們會被逃脫!但這不是真的。當它被放置在單引號之間時,「來源的意願」將被逃脫 – bkwint 2012-07-13 11:50:27

0

嘗試使用var_dump打印消息,這可能會揭示更好的字符串值。

+0

我現在嘗試了'var_dump',但它不顯示轉義字符。 – 2012-07-13 11:20:14

0

或許用它來將ty並刪除斜線:​​

stripslashes($str); 
+0

沒有電子郵件客戶端顯示'rn'而不是'\ r \ n'。真奇怪。 – 2012-07-13 11:39:19

相關問題