我试图用两个空格暂时替换所有换行符,并在字符串上的某些函数将其从两个空格恢复为换行符。
但它不起作用。它不会恢复换行符。
这就是我的所作所为:
首先用一个空格替换所有重复的空格。
$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步就行了。
答案 0 :(得分:1)
我建议使用那些:
$text = preg_replace('/ +/', ' ', $text);
这将只替换空格。 \s
将匹配不仅仅是空格,因为它还匹配垂直空格,如换行符,回车符......因此,您的第二个替换品没有要替换的任何换行符。
$text = str_replace(array("\r", "\r\n", "\n"), ' ', $text);
正如hkpotter92已经指出的那样,你需要使用双引号,否则,你试图匹配文字字符而不是carriable return和换行符。
$text = str_replace(' ', "\n", $text);
再次,你必须在这里使用双引号,否则,你最终会用文字\n
代替双重空格。
答案 1 :(得分:0)
PHP considers '\n'
是字面\n
字符串,而不是换行符。您需要为作业使用双引号("
):
$text = str_replace( array( "\r", "\r\n", "\n"), ' ', $text );
答案 2 :(得分:0)
正则表达式\s
表示whitespace (\n, \r, \t, \f, and " ")
。这就是为什么它会改变你的换行符。使用字符类[ ]
中的空格仅用于空格。
$text = preg_replace( '/[ ]+/', ' ',$text );
要将换行符更改为双精度空格,请使用此双精度值。
$text = str_replace( array( "\r", "\r\n", "\n"), ' ', $text );
或者,你也可以使用preg_replace
。
$text = preg_replace( '/[\n\r]/', ' ',$text );