用行分隔字符串用PHP分隔成HTML段落

用行分隔字符串用PHP分隔成HTML段落,php,html,string,line-breaks,Php,Html,String,Line Breaks,我从MySQL数据库中获取文本,该数据库分为几行(段落)。它存储在变量$post\u data['content']中。我怎样才能用换行符打印出来 我当前使用的代码: $post_data['content'] = explode("\n", $post_data['content']); $post = "<p>" . implode("</p><p>", array_values($post_data['content'])) . "</p>"

我从MySQL数据库中获取文本,该数据库分为几行(段落)。它存储在变量
$post\u data['content']
中。我怎样才能用换行符打印出来

我当前使用的代码:

$post_data['content'] = explode("\n", $post_data['content']);
$post = "<p>" . implode("</p><p>", array_values($post_data['content'])) . "</p>";
代码将显示如下(我不想要):

第1行第1段

第2行第1段

第3行第2段

第4行第2段

第5行第2段


如果行之间没有空格(只有一个换行符),我希望它将段落分组在一起。可能是爆炸后数组中有什么东西?

而不爆炸字符串

$post = "<p>" . nl2br($post_data['content']) . "</p>";
$post=“”。nl2br($post_data['content'])。“

”;
您可以试试

$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))));
$string='第1行第1段,
第2行第1段。
第3行第2段,
第4行第2段,
第5行第2款。”;
回波内爆(“\n”,数组映射(函数($v){
返回sprintf(“%s

”,$v); },数组_过滤器(分解(“\n”,$string));
另一种选择,使用段落和换行符:

$post = '';
$paragraphs = explode("\n\n", $post_data['content']);
foreach ($paragraphs as $paragraph) {
    $post .= '<p>' . nl2br($paragraph) . '</p>';
}
$post='';
$parages=explode(“\n\n”,$post_data['content']);
foreach($段落为$段落){
$post.=''.nl2br($段落)。

'; }
这将产生:


第1段第1行
第1段第2行第2段第1行首先,将换行符替换为

$post = nl2br($post_data['content']);
然后将double

替换为结束和开始段落标记(原始换行符由
nl2br
维护,因此我使用一个正则表达式,它匹配所有换行符样式):

$post=''。preg#u replace(“#(
[\r\n]+){2}#,”

,$post)。”

",;
请注意,这是XHTML语法,如果希望使用HTML,请按如下方式更改代码:

$post = nl2br($post_data['content'], false);
$post = '<p>' . preg_replace('#(<br>[\r\n]+){2}#', '</p><p>', $post) . '</p>';
$post=nl2br($post_数据['content',],false);
$post=“”。preg#u replace(“#(
[\r\n]+){2}#,”

,$post)。”

",;
测试:

$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;

$post\u data['content']=您是否尝试过
nl2br()
?它只创建了一个包含所有内容的
。这会添加更多的段落,但OP需要的更少(而不是换行)。使用
[\r\n\s]
效果更好(即使换行之间有空格也可以使用)
$post = '<p>' . preg_replace('#(<br />[\r\n]+){2}#', '</p><p>', $post) . '</p>';
$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;