You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PHP获取textarea内容行时非最后元素自动加空格问题

解决PHP中textarea内容行输出带多余空格的问题

嘿,我之前也碰到过一模一样的问题!其实这锅得甩给textarea提交的换行符——不同操作系统下,textarea里的换行格式不一样:Windows是\r\n,而Linux/macOS是\n。当你直接拆分内容时,Windows环境下的每行末尾会带着个\r字符,这玩意儿在浏览器里显示出来就是个空格,刚好最后一行如果没换行的话就不会有这个问题,所以就出现了你说的“除最后一个元素外都带空格”的情况。

给你两个靠谱的解决办法,直接改代码就行:

方案一:正则拆分+批量清理

这个方法能兼容所有系统的换行格式,还能顺手去掉空行:

<?php
if(isset($_POST['words_submit'])) {
    // 获取textarea提交的内容
    $text = $_POST['words'];
    // 用正则匹配所有换行格式拆分内容
    $lines = preg_split('/\r\n|\r|\n/', $text);
    // 给每一行去掉前后空白(包括\r、空格、制表符这些隐藏字符)
    $lines = array_map('trim', $lines);
    // 过滤掉空行(可选,如果你不需要保留空行的话)
    $lines = array_filter($lines);
    
    // 用for循环输出的示例
    $lineCount = count($lines);
    for($i = 0; $i < $lineCount; $i++) {
        echo $lines[$i] . '<br>'; // 替换成你原本的输出逻辑即可
    }
}
?>

方案二:先统一换行格式再拆分

如果你不想用正则,也可以先把Windows的\r\n替换成统一的\n,再拆分清理:

<?php
if(isset($_POST['words_submit'])) {
    $text = $_POST['words'];
    // 把Windows格式的换行统一换成Unix格式
    $text = str_replace("\r\n", "\n", $text);
    // 按换行符拆分内容
    $lines = explode("\n", $text);
    // 清理每一行的前后空白字符
    $lines = array_map(function($line) {
        return trim($line);
    }, $lines);
    // 过滤空行(可选)
    $lines = array_filter($lines);
    
    // 循环输出示例
    foreach($lines as $line) {
        echo $line . '<br>';
    }
}
?>

核心逻辑就是用trim()把每行前后的隐藏空白字符(包括那个搞事的\r)都去掉,这样输出的时候就不会有多余的空格啦。

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

火山引擎 最新活动