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

PHP从数据库fetch文本渲染到HTML时格式异常如何解决

文本显示异常原因

核心是两点:

  • HTML默认会将纯文本中的换行符、连续空格折叠为单个空格,存储在数据库中的文本自带的换行、分段不会被浏览器自动识别,就会出现文字挤成一团、排版错乱的问题。
  • 现有代码存在写法不规范、逻辑错误的问题,会加剧显示异常,同时带来严重安全隐患。
修复方案

1. 修正后端PHP查询逻辑

现有代码直接把GET参数拼入SQL语句、用extract导入外部参数、用数字索引取查询结果,既有SQL注入、变量覆盖的安全风险,也容易因为表结构变动取错字段导致内容显示异常,修正后代码如下:

<?php 
if(isset($_GET['id'])){
    // 直接获取指定参数,禁止用extract导入全部GET参数,避免变量覆盖风险
    $id = intval($_GET['id']);
    include('dbconnexion.php');
    try{
        // PDO预处理使用占位符,不要直接拼接变量到SQL语句
        $r=$db->prepare("SELECT * FROM GREENWORK WHERE id_gw = ?");
        // 绑定参数执行,从根源避免SQL注入
        $r->execute([$id]);
        // 用关联数组取值,不要用数字索引,避免字段顺序变动取错内容
        $tbl=$r->fetch(PDO::FETCH_ASSOC);
    }catch(PDOException $err){
        die("查询出错: ".$err->getMessage());
    }
}
?>

2. 修正前端渲染逻辑,解决格式丢失问题

现有代码用print_r输出内容是错误用法:print_r是调试专用函数,用来打印变量结构,会输出多余的格式字符,不适合用来展示正常业务文本。
要保留文本原有换行格式,二选一即可:

方案一:用PHP原生函数转换换行标签

调用nl2br函数将文本中的换行符自动转换为HTML识别的<br>标签,同时必须做HTML特殊字符转义,避免特殊字符打乱排版、引发XSS漏洞:

<div class='container-fluid'>
  <h5>les ingredients :</h5>
  <p>
    <?php 
    // 把数组键名替换为你表中存储原料内容的真实字段名
    echo nl2br(htmlspecialchars($tbl['ingredients'] ?? '')); 
    ?>
  </p>
  <h5>La description:</h5>
  <p>
    <?php 
    // 把数组键名替换为你表中存储描述内容的真实字段名
    echo nl2br(htmlspecialchars($tbl['description'] ?? '')); 
    ?>
  </p>
</div>

注意:不要继续使用$tbl[3]、$tbl[4]这类数字索引取值,一旦调整表字段顺序,数字索引对应的内容会直接错位,必须用和字段名对应的关联索引取值。
所有从数据库取出、输出到HTML页面的内容,必须经过htmlspecialchars转义,否则文本中包含的<、>、&等特殊字会被浏览器解析为HTML标签,直接导致排版错乱。

方案二:用CSS保留原生文本格式

如果不想调整PHP输出逻辑,可以给展示文本的标签加CSS样式,让浏览器自动识别文本中的换行:

.text-show {
  /* 保留文本换行,连续空格正常折叠,适配普通长文本展示场景 */
  white-space: pre-line;
}

给对应展示文本的p标签加上该类名即可,输出时依然要做特殊字符转义,禁止用print_r输出:

<p class="text-show">
  <?php echo htmlspecialchars($tbl['对应真实字段名'] ?? ''); ?>
</p>
额外避坑提示
  • 禁止使用extract($_GET)、extract($_POST)这类直接把外部请求参数导入当前符号表的写法,攻击者可以通过传参覆盖代码内的已有变量,直接绕过权限校验、注入恶意代码。
  • 所有数据库查询如果用到外部传入的参数,必须用PDO预处理的参数绑定能力,不要直接把变量拼到SQL语句里,避免SQL注入拖库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:24:30