如何使用PHP从数据库读取富文本并在HTML中正确渲染原有格式
问题原因
你现在看到HTML标签原样展示,是因为内容中的<、>等HTML特殊字符被转换成了实体编码(比如<转成了<),浏览器会将这类实体编码识别为普通文本,不会解析成对应的HTML标签,自然没法保留原排版格式。
解决方法
分两种场景处理:
- 场景1:输出内容时主动做了转义处理
如果你在输出$post_content之前调用了htmlspecialchars()、htmlentities()这类转义函数,直接去掉转义逻辑,直接输出原内容即可:
<p><?php echo $post_content ?></p>
- 场景2:数据库中存储的内容本身已经是转义后的实体编码
如果入库时就已经对内容做了实体转义,输出时需要先把实体编码转回HTML标签,调用htmlspecialchars_decode()或者html_entity_decode()处理即可:
<p><?php echo htmlspecialchars_decode($post_content) ?></p>
注意事项
直接渲染用户提交的原生HTML内容存在XSS跨站脚本攻击风险,建议输出前先做标签白名单过滤,只保留<b>、<p>、<h2>这类你允许的安全排版标签,过滤掉<script>、<iframe>等危险标签,避免被注入恶意代码。
内容的提问来源于stack exchange,提问作者mhussein76
相关产品推荐
相关产品推荐

