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




