在我的网络应用程序中,我创建了一个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_EOL
是explode(PHP_EOL,$id_list)
在Windows中工作的唯一方式。
如何才能在Windows和Linux上运行?
答案 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上工作。