
本文讲解如何解决从数据库(如 text 类型字段)获取文本后在 html 中格式错乱的问题,包括换行丢失、html 标签未转义、sql 注入与 xss 风险等常见问题,并提供基于 pdo 的安全、规范的输出方案。
本文讲解如何解决从数据库(如 text 类型字段)获取文本后在 html 中格式错乱的问题,包括换行丢失、html 标签未转义、sql 注入与 xss 风险等常见问题,并提供基于 pdo 的安全、规范的输出方案。
在 Web 开发中,将用户输入的多行文本(如食材列表、产品描述)存入数据库的 TEXT 类型字段是常见做法。但直接使用 echo $tbl[4] 输出时,常出现两大问题:一是原始换行符(\n)在 HTML 中不生效(浏览器忽略纯换行),导致内容挤成一团;二是若文本含 、& 等特殊字符,可能被误解析为 HTML 标签,引发布局错乱甚至 XSS 漏洞。
✅ 正确做法:组合使用 nl2br() 与 htmlspecialchars()
nl2br() 将换行符 \n 转换为
标签,确保段落结构可见;htmlspecialchars() 则对 , ", ', & 进行实体编码,既保留原文本语义,又阻止 HTML 解析。二者顺序不可颠倒——必须先转义再换行,否则
可能被二次转义为 zuojiankuohaophpcnbr>,失去作用。
修改你的输出代码如下:
<div class="container-fluid"> <h5>Les ingrédients :</h5> <p><?php echo nl2br(htmlspecialchars($tbl[3] ?? '')); ?></p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站"><img src="https://img.php.cn/upload/skill/000/000/081/179040786932301.jpg" alt="btpanel phpsite 宝塔面板PHP网站" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="overflowclass">btpanel phpsite 宝塔面板PHP网站</a> <p class="overflowclass">宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理</p> </div> <a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div> <h5>La description :</h5> <p><?php echo nl2br(htmlspecialchars($tbl[4] ?? '')); ?></p> </div>
⚠️ 关键安全与健壮性改进
-
防止 SQL 注入:原代码中 $id 直接拼入 SQL 字符串,存在严重风险。应改用参数化查询(预处理语句):
$r = $db->prepare("SELECT * FROM GREENWORK WHERE id_gw = ?"); $r->execute([$id]); $tbl = $r->fetch(); - 字段长度保障:若文本被意外截断,请检查数据库字段类型。TEXT(64KB)通常足够,但若内容超长,建议升级为 MEDIUMTEXT(16MB)或 LONGTEXT(4GB)。可通过 SHOW CREATE TABLE GREENWORK 确认。
- 空值防御:使用 ?? '' 提供默认空字符串,避免 Notice: Undefined index 错误。
-
大小写规范:HTML 标签名统一小写(如
而非
),符合 HTML5 标准。
遵循以上实践,即可安全、清晰、可维护地呈现数据库中的文本内容——既尊重用户输入的格式意图,又筑牢 Web 安全防线。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










