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

如何避免MariaDB取出的带引号内容显示时附带反斜杠转义符?

问题根源

你遇到的是双重转义问题:
你同时使用了mysqli_real_escape_string()手动转义和预处理语句参数绑定,而后者本身就已经自带了SQL注入防护的转义逻辑,两次转义就会把额外的反斜杠存进数据库。
另外你把htmlentities()的调用放在了存库阶段也是不合理的,这个函数是用来做前端XSS防护的,应该放在输出环节调用,存原始内容到数据库更方便后续其他场景复用数据。

修复方案

1. 调整存库逻辑

删掉手动转义步骤,直接把原始用户输入绑定到预处理参数即可:

// $con为数据库连接
<?php
$message = $_POST['message'];
$insert = $con->prepare("INSERT INTO `db` (message) values(?)");
$insert->bind_param("s", $message);
$insert->execute();

2. 调整输出逻辑

从数据库读取内容后,输出到页面前再调用htmlentities()处理,既能防XSS攻击,也不会出现多余的转义符:

// $db_msg为从数据库取出的原始内容
echo htmlentities($db_msg);

旧数据处理

如果你的数据库里已经有带多余反斜杠的旧数据,可以用stripslashes()函数批量清理旧数据,应急场景下也可以在输出的时候临时调用stripslashes()处理内容,不过还是建议优先修正存库逻辑从根源解决问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:54:05