2012-11-14 167 views
1

我有以下PHP。在這裏,我創建一個表,循環訪問傳入數據的鍵和值,並將它們添加到行中。當接收到郵件,它是添加隨機空白/空格中聯樣式,例如:PHP foreach添加隨機空白/空白

bord er:4px solid #E4F5FD;

<td valign="top" style="padding:5px;border-collapse:collapse;bord er:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFFFFF;"> 

看到background:#FFF FFF;

padding:5px;border-collapse:collapse;border:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFF FFF;color:#888888; 

我沒有想法爲什麼這樣做,有沒有人遇到過這個問題?

請記住我正在學習PHP,所以請客氣。

$data_output .= '<table align="center" border="0" cellspacing="0" cellpadding="0" style="border-collapse:collapse;background:#E4F5FD;border:0;width:680px;">'; 

    foreach ($data_html as $key => $value) { 

     $data_output .= '<tr>'; 
     $data_output .= '<td valign="top" style="padding:5px;border-collapse:collapse;border:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFFFFF;"><b>'.str_replace('_',' ',$key).'</b></td>'; 

     $values = ''; 
     foreach($value as $v) { 
      $values .= $v.'<br />'; 
     } 

     $z = ''; 
     if($values == ''){ 
      $z = $value; 
     } else { 
      $z = $values; 
     } 

     $data_output .= '<td valign="top" style="padding:5px;border-collapse:collapse;border:4px solid #E4F5FD;text-transform:capitalize;font-family:arial;font-size:12px;background:#FFFFFF;color:#888888;">'.str_replace('_',' ',$z).'</td>'; 
     $data_output .= '</tr>'; 
    } 

    $data_output .= '</table>'; 


$from = '[email protected]'; 
$to = $_POST['email']; 
$cc = '[email protected]'; 
$subject = 'bla stuff'; 
$body = $data_output; 

$headers = ''; 
$headers .= "From: $from\n"; 
$headers .= "Cc: $cc\r\n"; 
$headers .= "Reply-to: $from\n"; 
$headers .= "Return-Path: $from\n"; 
$headers .= "Message-ID: <" . md5(uniqid(time())) . "@" . $_SERVER['SERVER_NAME'] . ">\n"; 
$headers .= "MIME-Version: 1.0\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\n"; 
$headers .= "Date: " . date('r', time()) . "\n"; 

if (mail($to, $subject, $body, $headers)){ 
    echo 'sent'; 
} else { 
    echo 'fail'; 
    die(); 
} 
+0

你是如何得到與缺口的輸出?它工作與否? (例如,是否應用了邊框) –

+0

我認爲問題不在該foreach內部......嘗試在生成數據輸出時打印(回顯)所有字符串,並與稍後打印的內容進行比較。 – dognose

+1

在這段代碼之後,我敢打賭$ data_output發生了其他事情。 – 2012-11-14 13:23:36

回答

2

確保內容的每行長度不超過78個字符,也不是說你超過998個字符的連續。

這是問題所在,我在每行和單元格的末尾添加了「\ n」來破壞行內容。

foreach ($data_html as $key => $value) { 
     $data_output .= 
     '<tr>'."\n". 
     '<td style="border:4px solid #DADADA;background:#FFFFFF;text-transform:capitalize;">' . str_replace('_',' ',$key) . '</td>'."\n". 
     '<td style="border:4px solid #DADADA;background:#FFFFFF;">' . $value . '</td>'."\n". 
     '</tr>'."\n"; 
    } 
0

沒有什麼不對您的$_data_output

檢查您在您所查看的郵件客戶端中的設置。

0

這不是foreach循環的問題,但帶有表格。有時(至少在某些瀏覽器中)HTML標記中的td之間的實際空間會呈現爲網頁中的實際空間。

爲了避免這種情況,請將font-size:0添加到您的表類中,然後再次爲您的td類定義fontsizes。

0

歡迎電子郵件格式的世界 - 你的問題是最有可能您正在查看的最終結果/電子郵件的電子郵件客戶端 - 測試了這一點做:

file_put_contents('test.htm',$data_output); 

運行此腳本並打開文件,看看你輸出的文件中是否有空格(RAW輸出)

如果是這樣的腳本是問題,如果不是你的電子郵件客戶端格式化電子郵件,因爲大多數電子郵件客戶端解析傳入的電子郵件,更改樣式和周圍的內聯標籤,刪除標籤和各種可怕的東西...

做一個Gooogle企業搜索上 - this,你會發現相關的文章....

+0

謝謝@on_,這真的很有幫助。 – Sawarduk