2010-07-05 45 views
1

我正在使用Zend_Mail發送日誌文件的電子郵件,但它發送郵件客戶端不喜歡的不友好的字符。Zend_Mail發送特殊字符在客戶端破壞電子郵件

我的代碼:

<?php 
$sBody = "errors.log (>= WARN):\n\n"; 
$rFile = fopen($sErrorsLog, "r"); 
while (!feof($rFile)) 
{ 
    $sLine = fgets($rFile); 
    $sBody.= $sLine; 
} 

$oMail = new Zend_Mail(); 
$oMail->addTo($sTo) 
     ->setFrom($sFrom) 
     ->setSubject($sSubject) 
     ->setBodyText($sMessage); 

電子郵件正文我收到:

errors.log(> = WARN):

時間戳| 2010-07-05T09:48:03 10:00消息| O:11: 「ArrayObject的」:3:{S:9: 「異常」,O:32: 「Zend_Controller_Action_Exception來」:7:{S:25:」

錯誤日誌包含(這是從頂部提取的)

timestamp | 2010-07-05T09:48:03 + 10:00 message | O:11:「ArrayObject」:3:{s: 9:「exception」; O:32:「Zend_Controller_Action_Exception」:7:{s:25:「Zend_Exception_previous」; N; s:10:「* message」; s:64:「Action」crgdtgdf「does not exist and was沒有被困在__call()中; s:17:「Exceptionstring」; s:0:「」; s:7:「* code」; i:404; s:7:「* file」; s:73:「 /var/www/development/workspaces/s.rees/library/Zend/Controller/Action.php";s:7: 「*線」; I:485; S:16: 「Exceptiontrace」;一個:4:{ I:0;一個:6:{S:4: 「文件」,S:73: 「/無功/網絡/發展/工作區/ s.rees /庫/的Zend /控制器/ action.php的」; S:4: 「線」; I:515; S:8: 「功能」; S:6: 「__呼叫」; S:5: 「類」; S:22: 「化Zend_Controller_Action」; S:4: 「類型」; S: 2: 「 - >」; S:4: 「ARGS」;一個:2:{I 0,S:14: 「crgdtgdfAction」; I:1; A:0:{}}} I:1;一個: 6:

任何想法如何過濾/編碼電子郵件,以便顯示所有日誌輸出? 我真的需要它通過電子郵件發送所有的細節。

回答

2

PHP的序列化數據在任何序列化對象的私有或受保護成員之前包含一個空字節。

您將需要對輸出進行反序列化和重新處理,否則在發送電子郵件之前需要將空字節除去。

+0

啊,這是有道理的。有沒有簡單的方法去除空字節? – 2010-07-05 02:20:11

+0

我剛剛做了str_replace(「\ 0」,「」,$ sLine);它似乎工作:) 謝謝! – 2010-07-05 02:25:46

+0

這是非常規範的做法,是的。 :) – Charles 2010-07-05 03:02:48

0

我解決了這個使用:

$text = filter_var($text, FILTER_SANITIZE_SPECIAL_CHARS); 
相關問題