可靠地从字符串中删除换行符

Ric*_*nop 3 php

字符串输入来自textarea,用户应该在新行上输入每个项目.

处理表单时,很容易将textarea输入分解为单个项目数组,如下所示:

$arr = explode("\n", $textareaInput);
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我担心它在不同的系统中无法正常工作(我目前只能在Windows中测试).我知道新行在不同的平台上表示为\ r \n或者只是\ r \n.上述代码行是否也能在Linux,Solaris,BSD或其他操作系统下正常运行?

Atl*_*tli 8

你可以preg_split用来做那件事.

$arr = preg_split('/[\r\n]+/', $textareaInput);
Run Code Online (Sandbox Code Playgroud)

它将它分成任意组合\r\n字符.您还可以使用\s包含任何空白字符.

编辑
它发生在我身上,虽然前面的代码工作正常,但它也删除了空行.如果你想保留空行,你可能想尝试这样做:

$arr = preg_split('/(\r\n|[\r\n])/', $textareaInput);
Run Code Online (Sandbox Code Playgroud)

它基本上是从寻找Windows版本开始的\r\n,如果失败,它会查找旧的Mac版本\r或Unix版本\n.

例如:

<?php
$text = "Windows\r\n\r\nMac\r\rUnix\n\nDone!";
$arr = preg_split('/(\r\n|[\r\n])/', $text);
print_r($arr);
?>
Run Code Online (Sandbox Code Playgroud)

打印:

Array
(
    [0] => Windows
    [1] => 
    [2] => Mac
    [3] => 
    [4] => Unix
    [5] => 
    [6] => Done!
)
Run Code Online (Sandbox Code Playgroud)