网站联系表单提交后显示HTML标签及邮件样式失效问题求助
问题排查与解决方案
问题1:表单提交后页面显示原始HTML标签
原因分析:你的PHP脚本里设置了header('Content-Type: application/json');,但实际返回的是HTML格式的提示消息(比如Message Sent Successfully!),浏览器会把这些HTML内容当成JSON来解析,所以直接显示原始标签而非渲染后的内容。
解决方案:
- 如果你的表单是普通同步提交(非AJAX异步提交),直接删除这行代码:
header('Content-Type: application/json'); - 如果是AJAX提交,需要把返回消息封装成JSON格式,比如:
再在前端JS里解析JSON并渲染消息内容,不要直接输出HTML。echo json_encode(['msg' => $msg]); exit;
问题2:邮件仅显示纯文本,无法样式化展示
原因分析:
- 邮件模板
inc/contact.php内容不完整(代码结尾截断为st),HTML结构未闭合,邮件客户端无法正确识别为HTML格式; - 模板使用了外部CSS链接,大部分邮件客户端会阻止加载外部样式,导致样式失效;
- 变量替换时,用户输入的特殊字符(如
<、>)会破坏HTML结构,未做转义处理。
解决方案:
修复模板完整性:
补全inc/contact.php的HTML闭合标签,确保结构完整:</div> </div> </section> </div> </body> </html>将外部CSS转为内联样式:
邮件客户端对外部CSS支持极差,建议把所有样式直接写在元素的style属性里,比如:<h3 class="animate-intro" id="message" style="color: #333; font-size: 24px;"></h3>安全转义用户输入:
替换变量时用htmlspecialchars()转义内容,避免破坏HTML结构:$mail->Body = str_replace('$name', htmlspecialchars($name), $mail->Body); $mail->Body = str_replace('$email', htmlspecialchars($email), $mail->Body); $mail->Body = str_replace('$subject', htmlspecialchars($subject), $mail->Body); $mail->Body = str_replace('$message', htmlspecialchars($message), $mail->Body);确认HTML发送设置:
确保$mail->isHTML(true);未被注释,让PHPMailer以HTML格式发送邮件。
额外优化建议
- 表单提交后,用
header("Location: contact.php?msg=" . urlencode($msg));跳转到原页面,再在页面上渲染提示消息,避免直接输出内容导致的格式问题; - 对用户输入的邮箱地址做格式验证,提升邮件发送的成功率;
- 测试邮件时可使用邮件预览工具,提前排查渲染问题。
内容的提问来源于stack exchange,提问作者Ola Kazeem
相关产品推荐
相关产品推荐

