我从我的MySQL数据库中获取文本,该文本分为几行(段落)。它存储在变量$post_data['content']
中。如何使用换行符打印出来?
我目前正在使用的代码:
$post_data['content'] = explode("\n", $post_data['content']);
$post = "<p>" . implode("</p><p>", array_values($post_data['content'])) . "</p>";
这在我想要的范围内不起作用。
如果我在数据库中有这样的文字:
line 1 paragraph 1,
line 2 paragraph 1.
line 3 paragraph 2,
line 4 paragraph 2,
line 5 paragraph 2.
代码会显示如下(我不想要):
<p>line 1 paragraph 1,</p>
<p>line 2 paragraph 1.</p>
<p>line 3 paragraph 2,</p>
<p>line 4 paragraph 2,</p>
<p>line 5 paragraph 2.</p>
如果行之间没有空格(只有一个换行符),我希望它将段落分组在一起。爆炸后阵列可能还有什么东西?
答案 0 :(得分:15)
首先,使用<br />
:
$post = nl2br($post_data['content']);
然后用关闭和打开段落标记替换双<br />
(原始换行符由nl2br
维护,因此我使用匹配所有换行符样式的正则表达式:
$post = '<p>' . preg_replace('#(<br />[\r\n]+){2}#', '</p><p>', $post) . '</p>';
请注意,这是XHTML语法,如果您想要HTML,请按以下方式更改代码:
$post = nl2br($post_data['content'], false);
$post = '<p>' . preg_replace('#(<br>[\r\n]+){2}#', '</p><p>', $post) . '</p>';
<强>测试强>
$post_data['content'] = <<<TXT
line 1 paragraph 1,
line 2 paragraph 1.
line 3 paragraph 2,
line 4 paragraph 2,
line 5 paragraph 2.
TXT;
$post = nl2br($post_data['content'], false);
$post = '<p>' . preg_replace('#(<br>[\r\n]+){2}#', "</p>\n\n<p>", $post) . '</p>';
echo $post;
测试输出:
<p>line 1 paragraph 1,<br>
line 2 paragraph 1.</p>
<p>line 3 paragraph 2,<br>
line 4 paragraph 2,<br>
line 5 paragraph 2.</p>
答案 1 :(得分:0)
不爆炸字符串。
$post = "<p>" . nl2br($post_data['content']) . "</p>";
答案 2 :(得分:0)
你可以尝试
$string = 'line 1 paragraph 1,
line 2 paragraph 1.
line 3 paragraph 2,
line 4 paragraph 2,
line 5 paragraph 2.';
echo implode("\n",array_map(function ($v) {
return sprintf("<p>%s</p>", $v);
}, array_filter(explode("\n", $string))));
答案 3 :(得分:0)
使用段落和换行符的另一种选择:
$post = '';
$paragraphs = explode("\n\n", $post_data['content']);
foreach ($paragraphs as $paragraph) {
$post .= '<p>' . nl2br($paragraph) . '</p>';
}
这应该产生:
第1段第1行第1段第2行
第2段第1行