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

PHP联系表单特殊字符被替换删除 如何让$message正常发送

问题根源

你遇到的特殊字符异常是两个原因导致的:

  1. 你使用的FILTER_SANITIZE_STRING过滤器默认行为就是移除HTML标签(所以包含<>的内容会被整体删除)、将单双引号转义为HTML实体(所以'变成&#39;、"变成&#34;),完全匹配你遇到的前三个异常现象。
  2. 邮件头没有指定UTF-8编码,UTF-8格式的英镑符号被邮件客户端用西欧编码解析,就会显示为£。

具体修改步骤

1. 调整消息内容的过滤规则

把原代码中$message的过滤行:

$message = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);

修改为直接获取原始内容即可,如果需要基础的去除首尾空白可以加trim:

$message = trim($_POST["msg"]);

如果后续你需要把消息以HTML格式展示,再单独使用htmlspecialchars($message)对内容做转义即可,不要在获取原始内容阶段做过滤。
提示:如果你希望用户名、主题字段也保留特殊字符,也可以对应替换掉这两个字段的FILTER_SANITIZE_STRING过滤规则,邮箱字段的FILTER_SANITIZE_EMAIL可以保留,不会影响正常使用。

2. 给邮件头添加UTF-8编码声明

把原代码中的邮件头配置部分:

$headers = 'From: myemail@mydomain.com' . "\r\n" .
'Reply-To: '.$user_email.'' . "\r\n" .
'Bcc: mysecondemail@hotmail.com' . "\r\n";

补充字符集声明:

$headers = 'From: myemail@mydomain.com' . "\r\n" .
'Reply-To: '.$user_email.'' . "\r\n" .
'Bcc: mysecondemail@hotmail.com' . "\r\n" .
'Content-Type: text/plain; charset=utf-8' . "\r\n";

如果你需要发送HTML格式的邮件,把text/plain改为text/html即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:15:03