Php 将所有换行符替换为两个空格,然后将其还原

Php 将所有换行符替换为两个空格,然后将其还原,php,regex,preg-replace,str-replace,Php,Regex,Preg Replace,Str Replace,我试图用两个空格临时替换所有换行符,并在字符串上执行某些函数后将其从两个空格恢复为换行符 但它不起作用。它不会恢复换行符 我就是这么做的: 首先用一个空格替换所有重复的空格 $text = preg_replace( '/\s+/', ' ',$text ); 将换行符替换为两个空格 $text = str_replace( array( '\r', '\r\n', '\n'), ' ', $text ); 运行一些函数 恢复换行符 $text = str_replace( ' ',

我试图用两个空格临时替换所有换行符,并在字符串上执行某些函数后将其从两个空格恢复为换行符

但它不起作用。它不会恢复换行符

我就是这么做的:

  • 首先用一个空格替换所有重复的空格

    $text = preg_replace( '/\s+/', ' ',$text );
    
  • 将换行符替换为两个空格

    $text = str_replace( array( '\r', '\r\n', '\n'), '  ', $text );
    
  • 运行一些函数

  • 恢复换行符

    $text = str_replace( '  ', '\n', $text );
    
  • 据我所知,它用一个空格替换了换行符。不像他们中的两个。会发生什么?使用
    \s\s
    不会改变任何事情


    测试了一些东西:

    str_replace
    (步骤2)只有在我使用
    preg_replace
    替换重复的空白(步骤1)后,才能检测到换行符

    没有步骤1,它就可以工作

    '\n'
    为文字
    \n
    字符串,而不是换行符。作业需要使用双引号(
    ):

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

    在正则表达式中
    \s
    表示
    空白(\n\r\t\f和“”)
    。这就是它更改换行符的原因。字符类
    []
    中的空格仅用于空格

    $text = preg_replace( '/[ ]+/', ' ',$text );
    
    要将换行符更改为双空格,请使用使用双引号的换行符

    $text = str_replace( array( "\r", "\r\n", "\n"), '  ', $text );
    
    或者,您也可以使用
    preg\u replace

    $text = preg_replace( '/[\n\r]/', '  ',$text );
    

    我建议使用这些:

  • $text=preg_replace('/+/','$text);

    这将只替换空格。
    \s
    将匹配的不仅仅是空格,因为它还匹配垂直空格,如换行符、回车符……因此,您的第二次替换没有任何新行要替换

  • $text=str\u replace(数组(“\r”、“\r\n”、“\n”)、“$text”);

    正如hkpotter92已经指出的,您需要使用双引号,否则,您将尝试匹配文字字符,而不是可携带的返回和换行符

  • $text=str\u replace(“”,“\n”,$text);

    同样,您必须在这里使用双引号,否则,最终将使用文本
    \n
    代替双空格


  • 您在这里做了4件不同的事情,其中一件显然不起作用?哪一件?请从问题中删除另外三件。另外,请发布对您不起作用的
    $text
    的值。好的。我的错。但问题仍然存在:preg_replace('/\s+/','two whitespaces',$text)将新行替换为一个空格而不是两个空格。您的权利。我是这样实现的:
    while(strpos($this->\u text,){$this->\u text=str\u replace('',$this->\u text);}
    @user2429266也可以,如果你不介意使用循环:)但是还有另一个问题。这个:
    $text=str\u replace(数组(“\r”,“\r\n”,“\n”),”,“,”,”,“,$text);
    将每一个换行符替换两次。而不仅仅是一次。
    $This->\u text=strtext LINEBREAK text LINEBREAK“to:“text text text”@user2429266如果我能很好地理解这个问题,那是因为顺序的关系。试着使用这个数组:
    数组(“\r\n”、“\r”、“\n”)
    ,这样,它会在
    \r
    和单个替换中断之前查找
    \n