【问题标题】:PHP foreach adding random gaps/whitespacePHP foreach 添加随机间隙/空白
【发布时间】:2012-11-02 23:44:28
【问题描述】:

我有以下 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();
}

【问题讨论】:

  • 你是如何得到有间隙的输出的?它是否有效? (例如,是否应用边框)
  • 我认为问题不在于 foreach 内部...尝试在生成数据输出时打印(回显)所有字符串,并与稍后打印的内容进行比较。
  • 我敢打赌,在这段代码之后,$data_output 会发生其他事情。
  • 输出来自 Email Raw 源代码。
  • 我已经添加了 PHP 的最后一部分,$data_output 刚刚添加到正文中。

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


【解决方案1】:

确保每行内容的长度不超过 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";
    }

【讨论】:

    【解决方案2】:

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

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

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

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

    用谷歌搜索-this,你会找到相关文章....

    【讨论】:

    • 谢谢@on_,这真的很有帮助。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      你的$_data_output没有问题。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2016-01-17
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多