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

PHP输出SQL查询结果时,长comment字段超出屏幕的解决方法

解决长评论内容超出屏幕范围的问题

嘿,这个问题很好解决,给你几个实用的方案,你可以根据自己的需求来选:

1. 用CSS强制换行(最推荐,前端处理更灵活)

这是最常用的方法,不需要修改文本内容,通过CSS让容器自动适配宽度,长文本自动换行。你只需要把评论内容放在一个带样式的容器里就行:

修改后的输出代码:

if($con){ 
    mysqli_select_db($con, "db3"); 
    // 这里先提醒下:你的SQL有注入风险,后面会说怎么改
    $query1 = "SELECT * FROM data WHERE id = $id"; 
    $result = mysqli_query($con, $query1); 
    while ($row = mysqli_fetch_array($result)){ 
        echo "<div style='word-wrap: break-word; max-width: 100%;'>";
        echo "<b>Sent by: " . $row['uname'] . ":</b><br>";
        echo $row['comment'] . "<br>";
        echo "<u>Sent on: " . $row['time'] . "</u><br><br>";
        echo "</div>";
    }
}
  • word-wrap: break-word:会把过长的单词拆分开,避免单个单词撑破容器
  • max-width: 100%:保证容器不会超出父元素的宽度

如果你的页面有全局CSS文件,更推荐给这个容器加一个类名(比如comment-box),然后在CSS里统一设置样式,这样代码更整洁:

.comment-box {
    word-wrap: break-word;
    max-width: 100%;
    /* 还可以加一些内边距、背景色让评论区更好看 */
    padding: 10px;
    background-color: #f5f5f5;
    border-radius: 4px;
    margin-bottom: 10px;
}

对应的PHP代码就改成:

echo "<div class='comment-box'>";
// 后面的输出内容不变

2. PHP截断长文本(适合需要限制字数的场景)

如果不想展示完整的长评论,只想显示前N个字符并加省略号,可以用mb_substr()处理文本(支持中文等多字节字符,避免乱码):

if($con){ 
    mysqli_select_db($con, "db3"); 
    $query1 = "SELECT * FROM data WHERE id = $id"; 
    $result = mysqli_query($con, $query1); 
    while ($row = mysqli_fetch_array($result)){ 
        // 截取前200个字符,超过的话加省略号
        $comment = $row['comment'];
        $truncated_comment = mb_substr($comment, 0, 200, 'UTF-8');
        if(mb_strlen($comment, 'UTF-8') > 200){
            $truncated_comment .= '...';
        }

        echo "<b>Sent by: " . $row['uname'] . ":</b><br>";
        echo $truncated_comment . "<br>";
        echo "<u>Sent on: " . $row['time'] . "</u><br><br>";
    }
}

你可以根据需求调整200这个数字,改成适合你页面的字数。

3. PHP自动插入换行符(适合纯文本评论)

如果评论是纯文本格式(没有HTML标签),可以用wordwrap()函数手动给长文本插入换行符:

if($con){ 
    mysqli_select_db($con, "db3"); 
    $query1 = "SELECT * FROM data WHERE id = $id"; 
    $result = mysqli_query($con, $query1); 
    while ($row = mysqli_fetch_array($result)){ 
        // 每80个字符插入一个<br>标签
        $wrapped_comment = wordwrap($row['comment'], 80, "<br>", true);

        echo "<b>Sent by: " . $row['uname'] . ":</b><br>";
        echo $wrapped_comment . "<br>";
        echo "<u>Sent on: " . $row['time'] . "</u><br><br>";
    }
}

这个方法适合那种没有自然换行的纯文本,强制让内容在指定长度处换行。


重要提醒:你的SQL存在注入风险!

看到你的代码里直接把$id拼进SQL语句里了,这非常危险,容易被SQL注入攻击。一定要用预处理语句来修复:

if($con){ 
    mysqli_select_db($con, "db3"); 
    // 用预处理语句
    $query1 = "SELECT * FROM data WHERE id = ?";
    $stmt = mysqli_prepare($con, $query1);
    // 绑定参数,"i"表示$id是整数,如果是字符串就用"s"
    mysqli_stmt_bind_param($stmt, "i", $id);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);

    while ($row = mysqli_fetch_array($result)){ 
        // 输出内容不变,用上面的任意一种方案处理评论
        echo "<div style='word-wrap: break-word; max-width: 100%;'>";
        echo "<b>Sent by: " . $row['uname'] . ":</b><br>";
        echo $row['comment'] . "<br>";
        echo "<u>Sent on: " . $row['time'] . "</u><br><br>";
        echo "</div>";
    }
    // 记得关闭语句和连接
    mysqli_stmt_close($stmt);
    mysqli_close($con);
}

这个改动能有效防止SQL注入,一定要加上哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:48:03