使用PHP将带有换行符的字符串分解为HTML段落

Ben*_*nny 6 html php string line-breaks

我从我的MySQL数据库中获取文本,这些文本被分成几行(段落).它存储在变量中$post_data['content'].如何使用换行符打印出来?

我目前使用的代码:

$post_data['content'] = explode("\n", $post_data['content']);
$post = "<p>" . implode("</p><p>", array_values($post_data['content'])) . "</p>";
Run Code Online (Sandbox Code Playgroud)

这在我想要的范围内不起作用.

如果我在数据库中有这样的文字:

line 1 paragraph 1,
line 2 paragraph 1.

line 3 paragraph 2,
line 4 paragraph 2,
line 5 paragraph 2.
Run Code Online (Sandbox Code Playgroud)

代码会显示如下(我想要):

<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>
Run Code Online (Sandbox Code Playgroud)

如果行之间没有空格(只有一个换行符),我希望它将段落组合在一起.爆炸后阵列可能还有什么东西?

Fab*_*ler 15

首先,用以下代码替换换行符<br />:

$post = nl2br($post_data['content']);
Run Code Online (Sandbox Code Playgroud)

然后<br />用关闭和打开段落标记替换double (原始换行符由维护nl2br,因此我使用正则表达式,匹配所有换行符样式):

$post = '<p>' . preg_replace('#(<br />[\r\n]+){2}#', '</p><p>', $post) . '</p>';
Run Code Online (Sandbox Code Playgroud)

请注意,这是XHTML语法,如果要使用HTML,请按如下所示更改代码:

$post = nl2br($post_data['content'], false);
$post = '<p>' . preg_replace('#(<br>[\r\n]+){2}#', '</p><p>', $post) . '</p>';
Run Code Online (Sandbox Code Playgroud)

测试:

$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;
Run Code Online (Sandbox Code Playgroud)

测试输出:

<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>
Run Code Online (Sandbox Code Playgroud)