str_replace(" \ r \ n")替换两次,而str_replace(" \ n")替换一次

时间:2016-05-29 20:44:41

标签: php string function replace

我有一个生成BBCode的html表单,这是在某些在线留言板中使用的html的修改形式。与BBCode最大的区别在于它在标签上使用括号而不是传统的小于/大于符号(例如[br])。

我的一个表单元素是一个多行文本框,可以发送如下文本:

红色

黑色

在每一行的末尾都有一个\ r \ n,它没有传递给我的输出,所以我得到了:

RedOrangeBlack

我使用以下代码将\ r \ n替换为[br]

$_description = stripslashes($_POST['description']);
$movie_description = str_replace("\r\n","[br]",$_description);

输出现在是:

黑色[BR] [BR]橙[BR] [BR]红色

哪一个太多了。

如果我将str_replace函数切换为:

$movie_description = str_replace("\n","[br]",$_description);

我得到黑色[br]橙色[br]红色哪个更好,但现在在第2行和第3行的前面有一个空格。如果我替换\ n而不是\ n结果很相似。

如何获得如下输出:

黑色[BR]橙[BR]红色

4 个答案:

答案 0 :(得分:0)

有两个换行符,所以将它们都替换为

$movie_description = str_replace("\r\n\r\n","[br]",$_description);

答案 1 :(得分:0)

$movie_description = preg_replace("/(\r?\n)+/","[br]",$_description);

答案 2 :(得分:0)

您的输入看起来有多个\r\n序列,而不是最后一个。即你的单词之间有一个空白。

要解决这个问题,如果只有一个或两个以上,你需要确定你想要做什么。

假设您在所有情况下只需要一个[br],我建议使用能够执行诸如preg_replace之类的通配符的命令。

php preg_replace replacing line break

中有一些例子

答案 3 :(得分:0)

使用preg_replace仅将一个或多个换行符替换为[br]

$str = 'Red

Orange

Black';
$str = preg_replace('/\R+/', '[br]', $str);
echo $str;

<强>输出:

Red[br]Orange[br]Black

\R代表任何类型的换行符。