如何从字符串中删除换行符(没有字符!)?

时间:2012-05-25 15:56:48

标签: php html replace line-breaks nl2br

这可能看起来像是一个骗局,但请放心不是 - 我已经搜索了SO以及网络的其余部分以找到我的问题的答案,并最终找到相同的“解决方案”而不是过度。无论如何,这里有:

我正在将用户输入从textarea保存到MySQL数据库(在WordPress环境中,但我认为这对此问题无关紧要)。稍后从数据库中检索它以显示给站点后端的管理员。当用户使用换行符提交文本时(即按Enter键),会出现问题。

示例字符串可能如下所示:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!

Greetings,
Bill

字符串中没有行尾字符(“\ n”,“\ r \ n”或类似字符)。

我在其上使用nl2br()来生成HTML输出,但这还不够。结果是:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill

根据我的理解,这是预期的nl2br()结果,因为插入标记并且不应该首先替换换行符?

然而,我需要的格式是:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill

如果字符串中有EOL字符,例如“\ n”,我会用str_replace()preg_replace()点击它并完成它,但我不知道是什么针如果首先没有字符,则提供这些功能中的任何一个。

我可以手动访问数据库中的相关字段,为每个换行符点击Backspace,以及我以后想要对字符串工作的内容。所以我知道我需要以上格式。

13 个答案:

答案 0 :(得分:379)

Ben's solution可以接受,但str_replace()远远快于preg_replace()

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

使用更少的CPU功率,减少世界二氧化碳排放量。

答案 1 :(得分:320)

您应该能够用删除所有换行符和回车符号的preg替换它。代码是:

preg_replace( "/\r|\n/", "", $yourString );

即使\n字符没有出现,如果你得到回车符,那里有一个看不见的字符。 preg替换应该抓住并修复它们。

答案 2 :(得分:14)

$str = "
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill";

echo str_replace(array("\n", "\r"), '', $str);  // echo $str in a single line

答案 3 :(得分:11)

这是因为nl2br()根本没有删除新行。

  

返回在所有换行符之前插入<br /><br> 的字符串\r\n\n\r\n和{{1 }})。

改为使用\r

str_replace

答案 4 :(得分:7)

您也可以使用PHP trim

  

此函数返回一个字符串,其中从str的开头和结尾剥去了空格。如果没有第二个参数,trim()将删除这些字符:

     
      
  • “”(ASCII 32(0x20)),一个普通的空间。
  •   
  • “\ t”(ASCII 9(0x09)),一个标签。
  •   
  • “\ n”(ASCII 10(0x0A)),新行(换行符)。
  •   
  • “\ r”(ASCII 13(0x0D)),回车。
  •   
  • “\ 0”(ASCII 0(0x00)),NUL字节。
  •   
  • “\ x0B”(ASCII 11(0x0B)),垂直制表符。
  •   

答案 5 :(得分:5)

要在Windows上正常使用,我建议使用

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

"\r\n" - 适用于Windows,"\r" - 适用于Mac和"\n" - 适用于Linux

答案 6 :(得分:5)

str_replace(PHP_EOL,null,$ str);

答案 7 :(得分:4)

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

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

使用 PHP_EOL 作为搜索替换参数也是一个好主意!奖励。

答案 8 :(得分:1)

已解决且运行良好

我认为我的回答为时已晚,但在 JS 脚本中使用它时遇到了相同的额外行问题,但它的工作原理是这样的

  $text     = nl2br($text);   // it will add <br /> and line breaks in string
   
  
 $text = preg_replace( "/\r|\n/", "", $text );// this line will remove extra line, 
 

 $text = str_replace("<br />","**",$text );  replcing <br /> with any unwanted common symbol like this astreaks "**" while inserting in DB
 


and when I want to use it in program that time I use it replacing **

 $text = str_replace("**","\\n",$text );

然后在程序中使用 $text

答案 9 :(得分:0)

我使用3行代码来完成这项工作,因此将 $ s 视为您的“资料” ...

$s=str_replace(chr(10),'',$s);
$s=str_replace(chr(13),'',$s);
$s=str_replace("\r\n"),'',$s);

答案 10 :(得分:0)

内置的替代项:else

trim — Strip whitespace (or other characters) from the beginning and end of a string
Description ¶
trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string

This function returns a string with whitespace stripped from the beginning and end of str.
Without the second parameter, trim() will strip these characters:

    " " (ASCII 32 (0x20)), an ordinary space.
    "\t" (ASCII 9 (0x09)), a tab.
    "\n" (ASCII 10 (0x0A)), a new line (line feed).
    "\r" (ASCII 13 (0x0D)), a carriage return.
    "\0" (ASCII 0 (0x00)), the NUL-byte.
    "\x0B" (ASCII 11 (0x0B)), a vertical tab.

可以从不同类型的文本文件中删除换行符,但不能处理html。

答案 11 :(得分:0)

您可以使用 preg_replace 来替换匹配正则表达式的字符串部分,例如:

preg_replace("/\s+/","",$string);

答案 12 :(得分:-4)

由于您正在使用WP,为什么不利用此处记录的Wordpress wpautop()函数:https://codex.wordpress.org/Function_Reference/wpautop

尝试:

wpautop( $string );