我有一个 php 函数,用于将换行符转换为段落,但忽略任何已经包含在 h、ul、ol 或 li 标记中的行。这工作正常,除非字符串如下:
<h1>lkjhlkjkl</h1>
hgjk
<ul>
<li>hjgkghjk</li></ul>
ghjkghj
渲染如下:
<h1>lkjhlkjkl</h1><p>hgjk</p><ul><li>hjgkghjk</li></ul><p>ghjkghj</p>
但是,如果结束 ul 标记位于单独的行上,则会呈现以下结果:
<h1>lkjhlkjkl</h1><p>hgjk</p><ul><li>hjgkghjk</li><p></ul><p>ghjkghj</p>
在结束 ul 之前放置 ap 标签
这是php:
<?php
function format_html($content)
{
$content = preg_replace("/<(h[1-6]|ul|ol|li)>\n/", "<$1>", $content);
$content = preg_replace("/<\/(h[1-6]|ul|ol|li)>\n/", "</$1><p>", $content);
$content = "<p>" . str_replace("\n", "</p><p>", $content);
$content = preg_replace("/<p><(h[1-6]|ul|ol|li)>/", "<$1>", $content);
return $content;
}
function format_html_end($content)
{
$content = preg_replace("/<\/(h[1-6]|ul|ol|li)><\/p>/", "</$1>", $content);
return $content;
}
echo format_html_end(format_html("$content</p>"));
?>
任何想法如何防止这个小错误?