You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:PHP数组生成HTML表格嵌入邮件实现失败

解决PHP数组转HTML邮件表格的问题

嘿,我明白你现在的困扰——想把PHP里的数组数据转成两列HTML表格用来发邮件,但用foreach遍历的时候没成功。别担心,咱们一步步来搞定这个事儿!

首先,先理清楚你的需求:你有一个$fields数组,它是表单字段名和友好显示名称的映射,你需要把每个字段的显示名称和对应的实际提交值做成两列的表格。假设你还有一个存储用户提交数据的数组(比如叫$reservationData),里面包含了kosten、name这些字段的实际值,那咱们可以这样写代码:

完整代码示例

<?php
// 邮件主题
$subject = 'Nieuwe reservering';

// 字段名与荷兰语显示名称的映射
$fields = array(
    'kosten' => 'Kosten',
    'name' => 'Naam',
    'surname' => 'Achternaam',
    'phone' => 'Telefoonnummer',
    'kamer' => 'Kamer',
    'aankomst' => 'Aankomstdatum',
    'vertrek' => 'Vertrekdatum'
);

// 假设这是用户提交的实际预订数据(替换成你的真实数据源即可)
$reservationData = array(
    'kosten' => '€150,-',
    'name' => 'Jan',
    'surname' => 'Janssen',
    'phone' => '06-12345678',
    'kamer' => 'Deluxe Kamer 3',
    'aankomst' => '2024-05-10',
    'vertrek' => '2024-05-15'
);

// 开始构建HTML邮件内容(适配邮件客户端的样式)
$htmlContent = '<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>' . $subject . '</title>
    <style>
        table { border-collapse: collapse; width: 100%; max-width: 600px; margin: 20px auto; }
        th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
        th { background-color: #f5f5f5; }
        h2 { text-align: center; color: #333; }
    </style>
</head>
<body>
    <h2>' . $subject . '</h2>
    <table>';

// 用foreach遍历数组,生成表格行
foreach ($fields as $fieldKey => $fieldLabel) {
    // 检查对应数据是否存在,避免PHP警告
    $fieldValue = isset($reservationData[$fieldKey]) ? $reservationData[$fieldKey] : 'Niet opgegeven';
    // 转义特殊字符,防止HTML结构被破坏或XSS攻击
    $htmlContent .= '<tr>
                        <td><strong>' . htmlspecialchars($fieldLabel) . '</strong></td>
                        <td>' . htmlspecialchars($fieldValue) . '</td>
                    </tr>';
}

// 结束表格与HTML内容
$htmlContent .= '</table>
</body>
</html>';

// 发送邮件的基础配置(根据你的服务器调整)
$to = 'ontvanger@voorbeeld.nl';
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= 'From: <noreply@jouwwebsite.nl>' . "\r\n";

// 执行发送
mail($to, $subject, $htmlContent, $headers);
?>

关键要点说明

  • 邮件样式适配:邮件客户端对CSS支持有限,所以尽量用内部样式或inline样式,避免外部CSS文件,保证表格在多数客户端里显示正常。
  • htmlspecialchars()必加:这个函数会转义用户输入里的特殊字符(比如<、>),既防止XSS攻击,也避免破坏HTML结构。
  • 数据存在性检查:用isset()判断实际提交数据是否存在,不存在就显示默认文本(比如Niet opgegeven),避免出现PHP警告。
  • foreach遍历逻辑:遍历$fields的键和值,通过键去$reservationData里匹配实际值,这样就能完美对应显示名称和数据。

如果你之前的foreach没成功,大概率是这几个原因:

  • 拼接HTML时漏掉了.连接符,导致字符串没有正确累加;
  • 只遍历了数组的值,没有利用键去匹配实际数据;
  • 没有转义特殊字符,导致HTML结构被破坏。

内容的提问来源于stack exchange,提问作者Lars Breuren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:30:53