使用php regex从字符串中删除换行符

时间:2010-01-02 10:31:48

标签: php

如何使用php从字符串中删除换行符?

9 个答案:

答案 0 :(得分:81)

$string = str_replace(PHP_EOL, '', $string);

$string = str_replace(array("\n","\r"), '', $string);

答案 1 :(得分:41)

$string = str_replace("\n", "", $string);
$string = str_replace("\r", "", $string);

答案 2 :(得分:14)

要删除几个新行,建议使用正则表达式:

$my_string = trim(preg_replace('/\s\s+/', ' ', $my_string));

答案 3 :(得分:7)

更好用,

$string = str_replace(array("\n","\r\n","\r"), '', $string)

因为某些换行符仍然来自textarea输入。

答案 4 :(得分:5)

功能更强大(易于在任何地方使用):

function strip_carriage_returns($string)
{
    return str_replace(array("\n\r", "\n", "\r"), '', $string);
}

答案 5 :(得分:2)

试一试 它为我工作

首先从字符串中删除n(在n之前使用双斜杠),

然后从r

等字符串中删除n

代码:

$string=str_replace("\\n",$string);
$string=str_replace("\\r",$string);

答案 6 :(得分:2)

使用 strtr

这是摆脱换行符的最快方式:

    // method 1
    $s = strtr($s,"\n\r","  ");

这只会将换行符替换为空格。实际上,当您处理html文本时,这是理想的。它不会在行尾连接单词(例如,“ bro”位于末尾,下一行的“ Ken”不会变成“ broKen”)。同时,它非常快,不会改变字符串的长度(节省大量数据!),并且除了字符级处理外,不需要任何其他操作,这非常高效。 (与将数组提供给strtr明显相反)

现在,如果由于某些原因您要实际上删除换行符:

    // method 2
    $s = strtr($s,["\n"=>"","\r"=>""]);  

    // method 3
    $s = preg_replace('/[\r\n]/','',$s);  

这些方法使用相当短的纯文本字符串几乎可以以相同的速度运行。但是随着有效负载(4MB文本)的增加,细微的差别开始显示出来:

长字符串

4MB text with 70 thousand line breaks:
 - method 1: 3.26ms  // strtr("")
 - method 2: 8.58ms  // strtr([]) is slower
 - method 3: 6.05ms  // preg beats strtr! never expected that!

4MB text with 1.3 million line breaks:
 - method 1: 3.26ms  // stays the same, no matter how many replaces!
 - method 2: 33.12ms  // more work to do, slower execution
 - method 3: 55.73ms  // preg performs worst this time

方法1 是绝对赢家。不在乎它必须替换多少个字符-它一次又一次地触摸所有内容。

方法2和3 :当有很多要替换的东西时,带有数组的strtr比preg效率更高。如果是普通文本(每行80-100个字符),则preg会使strtr稍差一些;不过,在这种情况下,我通常也会选择strtr。但是,是的,预浸料的速度出乎意料的快,尤其是与其功能相比。

TLDR:

  • 如果方法1的输出足够好,请始终这样做;
  • 否则,预期的换行次数应决定比赛;
  • 除非你能成为蝙蝠侠,否则永远都是你自己。


关于PHP_EOL的注释:我已经看到提到此常量的答案,这表明我们应该只替换“官方”行尾序列,例如Windows的CRLF。现在,这通常是一个错误:虽然看起来很合适,但如果文件不是在同一平台上创建的,它将处理错误的文件。您在Linux上运行,处理从Windows上传的文件-las,您到处都是“ \ r”。所以不要这样它仅适用于同一平台的操作。

答案 7 :(得分:1)

stripcslashes应该足够了(删除\ r \ n等)

$str = stripcslashes($str);
  

返回一个反斜杠被去除的字符串。识别类似C的\ n,   \ r ...,八进制和十六进制表示形式。

答案 8 :(得分:-1)

     function removeP($text){
            $key=0;
            $newText="";
            while ($key < strlen($text)) {
                if(ord($text[$key])==9 or ord($text[$key])==10){
                    //$newText .= '<br>';//uncomment this if you want <br> to replace that spacial characters; 
                }else{
                    $newText .= $text[$key]; 
                }
                // echo $k."'".$t[$k]."'=". ord($t[$k])."<br>";
                $key++;
            }
            return $newText;
        }
        $myvar = removeP("your String");

注意:在这里,我没有使用php正则表达式,但是您仍然可以删除换行符

这将删除所有未由preg_replace,str_replace或trim函数删除的换行符