2012-11-14 136 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