Ajax发送HTML内容至PHP发邮件时a标签出现反斜杠问题求助
问题根源
你当前使用的是WordPress开发框架,WordPress核心默认会对所有通过常规POST/GET请求传入的参数自动添加转义斜杠,用来转义参数中的单引号、双引号,避免潜在的SQL注入风险。你直接取用$_POST['mailbody']时,a标签属性前后的引号已经被自动加上了反斜杠,插入邮件模板后就会破坏a标签的正常结构,导致链接无法点击。
解决方案
在PHP端接收到mailbody参数后,先移除WordPress自动添加的转义斜杠即可,推荐使用WordPress原生的移除转义函数,兼容性更好:
// 把原代码 $mailbody = $_POST['mailbody']; 修改为以下代码 $mailbody = wp_unslash($_POST['mailbody']);
也可以使用PHP原生函数实现相同效果:
$mailbody = stripslashes($_POST['mailbody']);
补充排查方向
如果修改后问题仍存在,可以按以下顺序排查:
- 检查服务器PHP配置是否开启了
magic_quotes_gpc,如果开启请关闭该配置,避免出现二次转义的情况 - 检查ACF字段的输出设置,确认ACF输出占位符内容时没有额外做转义处理
- 可以在替换模板占位符前,把
$mailbody的原始内容写入本地日志,确认转义斜杠是否是在替换占位符、发送邮件的环节额外添加的
内容的提问来源于stack exchange,提问作者enky00
相关产品推荐
相关产品推荐

