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

如何用PHP显示Post表content字段中带HTML标签的内容?

嘿,我一眼就看出问题所在啦——你用htmlspecialchars()把HTML标签都转义成纯文本了,所以浏览器没法渲染出你想要的红色标题效果~

问题根源

htmlspecialchars($row['content'], ENT_QUOTES)这个函数的核心作用是把HTML特殊字符转成实体,比如把<变成&lt;、>变成&gt;、双引号变成&quot;。这么做是为了防止XSS攻击,但代价是浏览器会把处理后的内容当成纯文本显示,不会解析HTML标签和样式。

举个例子,你的原始内容<h1 style="color:red">test</h1>,经过这个函数处理后会变成:

&lt;h1 style=&quot;color:red&quot;&gt;test&lt;/h1&gt;

浏览器自然就只会显示这段文本,而不是红色的一级标题。

直接解决方案(适合内容可信的场景)

如果你的Post表中content字段的内容是安全可信的(比如是你自己后台编辑的,不是用户提交的),直接去掉htmlspecialchars(),直接输出字段值就行:

<?php 
$sql = "SELECT content FROM post where id = 1"; 
$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
    // 遍历输出数据
    while($row = $result->fetch_assoc()) { 
        echo $row['content']; 
    } 
} else { 
    echo "0 results"; 
} 
?>

安全处理方案(适合用户输入的内容)

如果content是用户提交的内容,直接输出HTML会有XSS攻击风险,这时候你需要过滤不安全的标签和属性:

  • 简单过滤可以用strip_tags(),指定允许保留的标签:
    // 只允许<h1>、<p>和<span>标签
    $safeContent = strip_tags($row['content'], '<h1><p><span>');
    echo $safeContent;
    
  • 更严谨的过滤建议使用专业库(比如HTMLPurifier),它可以精细控制允许的标签、属性甚至样式规则,最大程度保障安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:21:53