这可能看起来像是一个骗局,但请放心不是 - 我已经搜索了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,以及我以后想要对字符串工作的内容。所以我知道我需要以上格式。
答案 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)
答案 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 );