最常用explode()分割换行符但需注意跨平台兼容性:windows用\r\n、老macos用\r、unix/linux及新版macos用\n;推荐preg_split('/\r\n|\r|\n/', $str, -1, preg_split_no_empty)或file()函数处理。

用 explode() 分割换行符最常用,但要注意换行符类型
Windows、macOS 和 Linux 的换行符不同:\r\n(Windows)、\r(老 macOS)、\n(Unix/Linux/macOS 新版)。直接用 explode("\n", $str) 在 Windows 上可能漏掉 \r,导致首行或末行多出回车符。
实操建议:
- 若确定输入来源统一(如只来自 PHP
file_get_contents()或表单 textarea),用explode("\n", $str)简单够用 - 若需兼容所有平台,优先用
preg_split():$lines = preg_split('/\r\n|\r|\n/', $str, -1, PREG_SPLIT_NO_EMPTY); - 避免用
split()(已废弃)或str_split()(按字符切,不是按换行)
用 file() 直接读成行数组,跳过手动分割
如果原始数据来自文件,file() 是更干净的选择——它默认按平台换行符自动拆分,且可选是否保留换行符。
实操建议:
- 读取本地文件并去除每行末尾换行:
$lines = file('/path/to/file.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); -
FILE_IGNORE_NEW_LINES去掉每行末尾的\n/\r\n;FILE_SKIP_EMPTY_LINES自动过滤空行 - 注意:
file()会把整个文件读入内存,超大文件慎用
PHP_EOL 不适合做分割依据
PHP_EOL 是当前 PHP 运行环境的“默认换行符”,比如 CLI 下是 \n,Apache + Windows 下可能是 \r\n。但它只反映服务器环境,不代表字符串本身的换行格式。
常见错误现象:
- 用户提交的 textarea 内容含
\r\n,但服务器在 Linux 上运行,PHP_EOL === "\n",用explode(PHP_EOL, $str)会把"a\r\nb"当作单行 - 不要依赖
PHP_EOL去解析外部输入的换行,它解决的是“输出时该用什么换行”,不是“输入里有什么换行”
处理 textarea 提交内容要额外 trim 每行
HTML <textarea></textarea> 提交的字符串开头或结尾可能有空白行,中间也可能有纯空格/制表符的“假空行”。单纯按换行分割后,$lines[0] 或 $lines[count($lines)-1] 可能是空字符串或带空格的行。
实操建议:
- 先用
trim()去掉整体首尾空白,再分割:$lines = array_map('trim', explode("\n", trim($str))); - 若需保留行内缩进但过滤空行,用
array_filter():$lines = array_filter(array_map('trim', explode("\n", $str)), 'strlen'); - 注意
array_map('trim', ...)会把所有行都去首尾空格,包括本意要保留缩进的场景——这时应改用正则或逐行判断
PHP_EOL”和“解析时认 PHP_EOL”混为一谈;还有就是忘了用户输入的换行符跟服务器环境无关,得按真实字节匹配。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











