字符串输入来自textarea,用户应该在新行上输入每一个项目。
处理表单时,很容易将textarea输入分解为单个项目数组,如下所示:
$arr = explode("\n", $textareaInput);
它工作正常,但我担心它在不同系统中无法正常工作(我目前只能在Windows中测试)。我知道新行在不同的平台上表示为\ r \ n或者只是\ r \ n。上面的代码行是否也可以在Linux,Solaris,BSD或其他操作系统下正常工作?
答案 0 :(得分:8)
您可以使用preg_split
来执行此操作。
$arr = preg_split('/[\r\n]+/', $textareaInput);
它会将其分为\r
或\n
字符的任意组合。您还可以使用\s
包含任何空白字符。
修改强>
在我看来,虽然前面的代码工作正常,但它也删除了空行。如果你想保留空行,你可能想尝试这样做:
$arr = preg_split('/(\r\n|[\r\n])/', $textareaInput);
它基本上从查找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);
?>
打印:
Array
(
[0] => Windows
[1] =>
[2] => Mac
[3] =>
[4] => Unix
[5] =>
[6] => Done!
)
答案 1 :(得分:4)
$arr = preg_split( "/[\n\r]+/", $textareaInput );
答案 2 :(得分:4)
'\ r'本身作为行终止符是一个旧的约定,不再使用了(不是因为基于Unix的OSX)。
您的explode
会好的。只需trim
关闭Windows用户的每个结果元素中的'\ n'。
答案 3 :(得分:1)
您可以规范化输入:
<?php
$foo = strtr($foo, array(
"\r\n" => "\n",
"\r" => "\n",
"\n" => "\n",
));
?>
或者,您可以使用正则表达式进行爆炸:
<?php
$foo = preg_split ("/[\r\n]+/", $foo);
?>
答案 4 :(得分:0)
以下代码必须完成工作
<?php
$split = preg_split('/[\r\n]+/', $src);
foreach ($split as $k=>$string) {
$split[$k] = trim($string);
if (empty($split[$k]))
unset($split[$k]);
}
ksort($split);
$join = implode('', $split);
?>
获取完全剥离newlinews的字符串。但它无法正常使用JS :(
答案 5 :(得分:0)
使用正则表达式的系统不可知技术涉及AddVMOption -Xmx1024M
转义序列。
PHP Documentation on Escape Sequences
这真的很简单,只需调用\R
。
\ R-换行符:匹配\ n,\ r和\ r \ n
如果无论如何都要爆炸替换字符,标准化输入都是浪费时间和精力。
如果您担心字符串中包含多个连续的换行符,可以在preg_split('~\R~', $textareaInput)
之后添加+
量词。
如果要从结果数组的字符串的两侧修剪空格字符,可以使用\R