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

PHP显示用户提交内容格式丢失问题解决方案咨询

解决textarea内容显示时丢失换行格式的问题

问题根源是:用户在textarea中输入的换行是\n(或\r\n)这类文本换行符,但浏览器渲染HTML时会忽略这些纯文本换行,只会识别<br>标签或者段落标签<p>来展示换行。下面提供两种简单有效的解决方法:

方法一:使用PHP内置函数nl2br()

直接在输出内容时用nl2br()函数,它会自动把文本中的换行符转换成HTML的<br>标签,让浏览器正确渲染换行。

修改你的内容输出代码:

<?php echo nl2br($row['content']); ?>

安全优化:防止XSS注入

如果允许用户输入任意内容,建议同时使用htmlspecialchars()转义特殊字符,避免跨站脚本攻击:

<?php echo nl2br(htmlspecialchars($row['content'])); ?>

方法二:使用CSS white-space属性

不需要修改PHP输出逻辑,给显示内容的容器添加CSS样式,让浏览器保留文本换行:

  1. 给显示内容的元素添加类名:
<div class="content-output"><?php echo htmlspecialchars($row['content']); ?></div>
  1. 在CSS中添加样式:
.content-output {
  white-space: pre-line;
}

pre-line会保留文本中的换行,同时自动合并连续的空白字符,适合展示段落式内容。

结合你的代码示例

在你的页面中添加内容展示区域的完整示例:

<?php
require_once 'dbconfig.php';

// 查询最新提交的内容
$displayStmt = $DB_con->prepare('SELECT content FROM template ORDER BY id DESC LIMIT 1');
$displayStmt->execute();
$displayRow = $displayStmt->fetch(PDO::FETCH_ASSOC);

if(isset($_POST['btnsave']))
{
  $content = $_POST['content'];
  
  $stmt = $DB_con->prepare('INSERT INTO template(content) VALUES(:content)');
  $stmt->bindParam(':content',$content);
  $stmt->execute();
  // 提交后刷新页面,显示最新内容
  header("Location: " . $_SERVER['PHP_SELF']);
  exit;
}
?>
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Bootstrap demo</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">
  <style>
    .content-output {
      white-space: pre-line;
      margin-top: 20px;
      padding: 10px;
      border: 1px solid #eee;
      border-radius: 4px;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="row">
      <div class="col-lg-4">
        <form method="post">
          <div class="mb-3">
            <label for="exampleFormControlTextarea1" class="form-label">Description</label>
            <textarea class="form-control" id="exampleFormControlTextarea1" rows="3" name="content"></textarea>
          </div>
          <button type="submit" name="btnsave" class="btn btn-primary">提交</button>
        </form>
        
        <!-- 内容展示区域 -->
        <?php if($displayRow): ?>
        <div class="content-output">
          <?php echo htmlspecialchars($displayRow['content']); ?>
        </div>
        <?php endif; ?>
      </div>
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:31:01