如何用PHP实现表单用户输入的原始HTML仅作为普通文本展示
解决方案
你遇到的是典型的跨站脚本(XSS)注入风险,只需要在输出用户内容到HTML页面时,对特殊字符进行转义即可,无需修改提交入库的逻辑。
具体修改方法
修改展示页面input.php中的输出逻辑,将原有的直接输出代码替换为转义输出的代码即可,修改后的完整代码如下:
<?php include("connection.php"); $query = "SELECT * FROM table"; $execute = mysqli_query($con, $query); if ($execute) { while ($row = $execute->fetch_assoc()) { // 对输出内容进行HTML实体转义 echo htmlspecialchars($row['column'], ENT_QUOTES); } } ?>
原理解释
htmlspecialchars函数会自动把HTML的特殊字符(<、>、"、'、&等)转换为对应的字符实体,比如<会被转换为<,浏览器接收到这些实体后不会将其识别为HTML标签,只会原样展示文本内容。- 建议在输出到页面的阶段做转义,不要在存入数据库的阶段转义,这样数据库中存储的是用户原始输入,方便后续导出、接口调用等其他场景的使用。
额外注意事项
你现有的提交代码中SQL语句存在语法错误,插入语句的末尾缺少双引号闭合,修正后写法如下:
$query = "insert into table (column) values('$input')";
内容的提问来源于stack exchange,提问作者DownOurPromisedPath
相关产品推荐
相关产品推荐

