Windows和Linux上的PHP_EOL

时间:2016-02-25 10:54:55

标签: php linux newline

在我的网络应用程序中,我创建了一个formula,它使用textarea来获取ID列表(以十六进制表示)。用户必须在输入每个ID后按return将它们分开。

<label class="col-md-3 control-label" for="id_list">IDs: </label>
<div class="col-md-9>
    <textarea class="form-control" id="id_list" name="id_list" required></textarea>
</div>

然后,我将此列表发送到服务器进行处理(在PHP中):

$id_list = trim($_POST['id_list'];
$id_array = explode(PHP_EOL, $id_list);

// file_put_contents('/tmp/bla.txt', $id_array);

for($i = 0; $i < count($id_array); $i++){
  // do stuff
}

// now I want to save the ids in a string which will separate the ids with ","
$id_string = str_replace(PHP_EOL, ',', $id_list)

这在Windows服务器上运行正常。但是,在Linux服务器上,它似乎与PHP_EOL有问题;当我将explode(PHP_EOL, $id_list)的结果放在txt文件中并在 Notepad ++ 中检查时,CR仍然存在。

我尝试了不同的方法'\n','\r\n',...,但似乎使用PHP_EOLexplode(PHP_EOL,$id_list)在Windows中工作的唯一方式。

如何才能在Windows和Linux上运行?

3 个答案:

答案 0 :(得分:0)

$id_list = trim($_POST['id_list']);
$id_array = explode("\n", $id_list);
$id_array = array_filter($id_array, 'trim');
foreach ($id_array as $line) {
    // do stuff here
} 

这应该可行,你在“\ n”上爆炸并修剪“\ r”(如果有的话)左边的任何内容。

答案 1 :(得分:0)

我建议你使用preg_split,因此正则表达式:

$id_array = preg_split('#[\s,]+#Sui', $id_list);

所以无论输入格式是什么,你都有一个ID数组。 您可以在此处查看此功能的手册:http://php.net/manual/en/function.preg-split.php

答案 2 :(得分:0)

我实际上(几乎)得到了正确的答案。 \ r \ n适用于两个系统,我只是错误地将它们放在''中,而""应该在这里使用。

explode("\r\n",$id_list)
str_replace("\r\n", ',', $id_list)

现在都在Windows和Linux上工作。