PHP foreach添加随机间隙/空格

时间:2012-11-14 13:13:32

标签: php html foreach html-table inline-styles

我有以下PHP。在这里,我创建一个表,循环传入数据的键和值,并将它们添加到行中。收到邮件时,它会在内联样式中添加随机间隙/空格,例如:

请参阅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 = 'website@bla.clo.uk';
$to = $_POST['email'];
$cc = 'me@bla.co.uk';
$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();
}

4 个答案:

答案 0 :(得分: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";
    }

答案 1 :(得分:0)

$_data_output

没有任何问题

检查您说正在查看的邮件客户端中的设置。

答案 2 :(得分:0)

这不是foreach循环的问题,而是表。有时候(至少在某些浏览器中)html标记中的td之间的实际空间会在网页中呈现。

为避免这种情况,请将font-size:0添加到您的表类中,然后再次为您的td类定义fontsizes。

答案 3 :(得分:0)

欢迎来到电子邮件格式化的世界 - 您的问题很可能是您正在查看最终结果/电子邮件的电子邮件客户端 - 来测试这样做:

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

运行此脚本并打开文件,查看输出文件中的样式是否有空格(RAW输出)

如果是这样,脚本就是问题,如果不是你的电子邮件客户端正在格式化电子邮件,因为大多数电子邮件客户端会解析传入的电子邮件,更改样式和内联标签,删除标签和各种可怕的东西......

进行gooogle搜索 - this,您会找到相关文章....