我有一个生成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]红色
答案 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之类的通配符的命令。
中有一些例子答案 3 :(得分:0)
使用preg_replace仅将一个或多个换行符替换为[br]
$str = 'Red
Orange
Black';
$str = preg_replace('/\R+/', '[br]', $str);
echo $str;
<强>输出:强>
Red[br]Orange[br]Black
\R
代表任何类型的换行符。