在PHP开发中,前端表单的复选框是用户多选场景的常用组件,获取用户选择的多个复选框值后,需要安全拼接并嵌入邮件正文发送,这个过程需要注意数据获取、拼接逻辑和安全处理三个核心环节。

获取复选框选择结果
前端复选框的name属性需要设置为数组形式,这样PHP才能接收到多个选择值。前端表单的复选框结构如下:
<form method="post" action="send_mail.php"> <p>请选择你感兴趣的技术方向:</p> <input type="checkbox" name="tech[]" value="PHP">PHP<br/> <input type="checkbox" name="tech[]" value="Java">Java<br/> <input type="checkbox" name="tech[]" value="Python">Python<br/> <input type="checkbox" name="tech[]" value="Go">Go<br/> <input type="submit" value="提交"> </form>
在PHP后端,通过$_POST['tech']可以获取到用户选择的复选框值组成的数组,如果用户没有选择任何复选框,这个键可能不存在,需要先做判断。
安全拼接复选框结果
拼接前需要先验证数据合法性,避免未定义索引报错,同时过滤掉无效值。拼接时可以根据邮件正文的格式需求选择分隔符,比如换行符、逗号等。
基础的拼接逻辑示例如下:
<?php
// 初始化选择结果数组
$selectedTech = [];
// 判断是否有复选框提交
if (isset($_POST['tech']) && is_array($_POST['tech'])) {
// 遍历数组过滤无效值
foreach ($_POST['tech'] as $value) {
$trimValue = trim($value);
if (!empty($trimValue)) {
$selectedTech[] = $trimValue;
}
}
}
// 如果没有选择任何内容,设置默认提示
if (empty($selectedTech)) {
$techStr = '未选择任何技术方向';
} else {
// 用换行符拼接,适合邮件正文多行展示
$techStr = implode(PHP_EOL, $selectedTech);
}
?>
处理特殊字符保障安全
如果复选框的value包含特殊字符,比如引号、尖括号、&符号等,直接拼接可能会导致邮件内容格式错乱,甚至存在注入风险,需要对特殊字符做转义处理。
如果是纯文本邮件,可以使用htmlspecialchars函数转义HTML特殊字符,避免内容被解析为HTML标签:
<?php
// 对每个选择值做转义处理
$safeSelectedTech = [];
foreach ($selectedTech as $value) {
// ENT_QUOTES参数会转义单引号和双引号
$safeSelectedTech[] = htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
$safeTechStr = implode(PHP_EOL, $safeSelectedTech);
?>
如果是HTML格式的邮件,需要保留HTML结构的话,可以使用htmlentities函数,同时指定编码:
<?php
$safeSelectedTech = [];
foreach ($selectedTech as $value) {
$safeSelectedTech[] = htmlentities($value, ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
// HTML邮件中用<br/>换行
$safeTechStr = implode('<br/>', $safeSelectedTech);
?>
嵌入邮件正文发送
拼接好的安全字符串可以直接嵌入邮件正文,以下是使用PHP内置的mail函数发送纯文本邮件的示例:
<?php
// 邮件接收者
$to = 'user@ipipp.com';
// 邮件主题
$subject = '您的技术方向选择结果';
// 邮件正文
$message = "您好,您选择的技术方向如下:" . PHP_EOL . PHP_EOL;
$message .= $safeTechStr . PHP_EOL . PHP_EOL;
$message .= "感谢您的参与。";
// 邮件头设置,指定内容类型为纯文本,编码为UTF-8
$headers = 'Content-Type: text/plain; charset=UTF-8' . PHP_EOL;
$headers .= 'From: sender@ipipp.com' . PHP_EOL;
// 发送邮件
if (mail($to, $subject, $message, $headers)) {
echo '邮件发送成功';
} else {
echo '邮件发送失败';
}
?>
注意事项
- 复选框的name属性必须带
[],否则PHP只能获取到最后一个选择的值 - 拼接前一定要判断
$_POST中对应键是否存在,避免未定义索引报错 - 特殊字符转义需要根据邮件格式选择对应的函数,纯文本和HTML邮件的处理方式不同
- 如果邮件内容包含中文,一定要在邮件头中指定UTF-8编码,避免乱码