代码之家  ›  专栏  ›  技术社区  ›  Ben

按新行分解PHP字符串

php
  •  221
  • Ben  · 技术社区  · 14 年前

    $skuList = explode('\n\r', $_POST['skuList']);
    
    18 回复  |  直到 14 年前
        1
  •  394
  •   Yukulélé    7 年前

    最佳实践

    正如第一个答案的注释中提到的,最佳实践是使用PHP常量 PHP_EOL 代表当前系统的下线( 行尾 ).

    $skuList = explode(PHP_EOL, $_POST['skuList']);
    

    PHP提供了很多 useful constants 可以用来使代码系统独立,请参见 this link 找到有用的独立于系统的目录常量。

    这些常量使页面系统独立,但是当您将常量与存储在另一个系统上的数据一起使用时,从一个系统移动到另一个系统时可能会遇到问题。新系统的常数可能与以前系统的常数不同,存储的数据可能不再工作。因此,在存储数据之前,请完全解析数据,以删除任何与系统相关的部分。

    更新

    所以请使用@Alin_Purcaru提供的解决方案( three down )为了涵盖你所有的基础(并提升他的答案):

    $skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
    
        2
  •  230
  •   Alin P.    11 年前

    $skuList = preg_split("/\\r\\n|\\r|\\n/", $_POST['skuList']);
    

    $skuList = preg_split('/\r\n|\r|\n/', $_POST['skuList']);
    
        3
  •  150
  •   Select0r    14 年前

    尝试 "\n\r" "\n" .

    如果您不确定拥有哪种类型的EOL,请在爆炸前运行str_replace,将“\n\r”替换为“\n”。

        4
  •  15
  •   Spudley Pat    14 年前

    • 您需要使用双引号,而不是单引号,否则转义字符将不会转义。
    • 正常的顺序是 \r\n ,不是 \n\r .
    • 根据消息来源,你可能会 \n 没有 \r (甚至在不寻常的情况下,可能只是 \右

    考虑到最后一点,你可能会发现 preg_split() 使用所有可能的变体将提供比 explode() 爆炸() \n个 trim() 删除任何 \右 留下来的角色。

        5
  •  11
  •   iman    11 年前

    这个php函数通过 新线

    敬告 窗户 \r\n Linux系统 Unix系统 \n个
    此函数将所有新行更改为 linux系统
    注意空行将被忽略

    function splitNewLine($text) {
        $code=preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$text)));
        return explode("\n",$code);
    }
    

    例子

    $a="\r\n\r\n\n\n\r\rsalam\r\nman khobam\rto chi\n\rche khabar\n\r\n\n\r\r\n\nbashe baba raftam\r\n\r\n\r\n\r\n";
    print_r( splitNewLine($a) );
    

    Array
    (
        [0] => salam
        [1] => man khobam
        [2] => to chi
        [3] => che khabar
        [4] => bashe baba raftam
    )
    
        6
  •  10
  •   Oberdan    12 年前

    尝试

    explode(chr(10), $_POST['skuList']);
    
        7
  •  6
  •   Andrew Sledge    14 年前

    $list = explode("\n", $text);
    

    对于换行符和回车符(如Windows文件中所示),它与您发布的一样。你的skuList是文本区域吗?

        8
  •  4
  •   Russell Dias    14 年前

    放置 \n 双引号:

    explode("\n", $_POST['skuList']);

    在单引号中,如果我没有弄错的话,这被视为 \ n 另外。

        9
  •  3
  •   piddl0r    14 年前

    你试过用双引号吗?

        10
  •  3
  •   nggit    8 年前

    nl2br :

    $skuList = explode('<br />', nl2br($_POST['skuList']));
    
        11
  •  1
  •   Paresh Mayani jeet    10 年前

    试试这个:

    explode(PHP_EOF, $lines);
    
        12
  •  1
  •   Utsav Barnwal    6 年前

    看似简单

    $skuList = explode('\\n', $_POST['skuList']);
    

    “\n” 和写作 \n个 直接用作转义序列。所以 "\\" 传递一个简单的反斜杠,然后

        13
  •  0
  •   Richard Marskell - Drackir Sunil Tandon    14 年前

    首先,我想通常 \r\n ,其次,这些在所有系统上都不一样。那只适用于窗户。试图找出如何替换新行是有点烦人的,因为不同的系统对新行的处理方式不同(参见 here ). 你也许会有更好的运气 \n .

        14
  •  0
  •   user37150    13 年前

    如果有人试过但没用,这提醒你你可能和我做了同样的脑屁。

    你的mysql是否先转义了字符串?在这种情况下,换行符不再是换行符。

    我没有做任何事情来避免解析它,只是修改并用“\n”(字面上的反斜杠和 n个 而不是实际的换行符。

        15
  •  0
  •   KarlosFontana    11 年前


    对我来说,更快的方法是复制粘贴任何文本或Excel或HTML表类型或换行类型的数据,并将其粘贴到文本区域,而不是inputextbox:

     <textarea  id="txtArea" name="txtArea" rows="40" cols="170"></textarea>
     <br>
     <input type="submit" value="split lines into array" /> 
    

    在表单接收文件中:

     $txtArea ='';  
     $txtArea = $_POST['txtArea'];  
     $TA = $_POST['txtArea'];  
     $string = $TA;  
     $array = preg_split ('/$\R?^/m', $string); 
    // or any of these: 
    // $array = explode(PHP_EOL,$string);  
    // $array = explode("\n", $txtArea); 
     echo "<br>A0: ".$array[0];
     echo "<br>A1: ".@$array[1];
     echo "<br>A2: ".@$array[2];
    
        16
  •  0
  •   user2533777 user2533777    11 年前

    这种方法对我总是有效的:

    $uniquepattern="@#$;?:~#abcz"//Any set of characters which you dont expect to be present in user input $_POST['skuList'] better use atleast 32 charecters.
    $skuList=explode($uniquepattern,str_replace("\r","",str_replace("\n",$uniquepattern,$_POST['skuList'])));
    
        17
  •  0
  •   Prince Lionel N'zi    7 年前

    PHP_EOL 表面上用于以跨平台兼容的方式查找换行符,因此它可以处理DOS/Unix问题。

    试试这个:

    $myString = "Prepare yourself to be caught
    You in the hood gettin' shot
    We going throw hell of blows
    got my whole frame froze";
    
    $myArray = explode(PHP_EOL, $myString);
    
    print_r($myArray);
    
        18
  •  0
  •   Tarol    6 年前

    你可以试试regex:

    $skuList = explode('/[\r\n]+/', $_POST['skuList']);

        19
  •  0
  •   codemonkey    6 年前

    这是对我有用的。在PHP5.6和PHP7.0中测试:

        $skuList = str_replace("\\r\\n", "\n", $_POST['skuList']);
        $skuList = str_replace("\\n\\r", "\n", $skuList);
    
        $skuList = preg_split("/\n/", $skuList);
        print_r($skuList);