【发布时间】:2012-02-10 15:58:53
【问题描述】:
我有以下代码可以很好地格式化 SQL 表中的文本。不过好像有点啰嗦。
它将从换行符创建段落,但忽略标题和列表标签(不将它们包装在“p”标签中。
谁能看到一个明显的方法来浓缩这个?
<?php
function format_html($content)
{
$content = str_replace("<h1>\r\n", "<h1>", $content);
$content = str_replace("</h1>\r\n", "</h1><p>", $content);
$content = str_replace("<h2>\r\n", "<h2>", $content);
$content = str_replace("</h2>\r\n", "</h2><p>", $content);
$content = str_replace("<h3>\r\n", "<h3>", $content);
$content = str_replace("</h3>\r\n", "</h3><p>", $content);
$content = str_replace("<h4>\r\n", "<h4>", $content);
$content = str_replace("</h4>\r\n", "</h4><p>", $content);
$content = str_replace("<h5>\r\n", "<h5>", $content);
$content = str_replace("</h5>\r\n", "</h5><p>", $content);
$content = str_replace("<h6>\r\n", "<h6>", $content);
$content = str_replace("</h6>\r\n", "</h6><p>", $content);
$content = str_replace("<ul>\r\n", "<ul>", $content);
$content = str_replace("</ul>\r\n", "</ul><p>", $content);
$content = str_replace("<ol>\r\n", "<ol>", $content);
$content = str_replace("</ol>\r\n", "</ol><p>", $content);
$content = str_replace("<li>\r\n", "<li>", $content);
$content = str_replace("</li>\r\n", "</li>", $content);
$content = "<p>" . str_replace("\r\n", "</p><p>", $content);
$content = str_replace("<p><h1>", "<h1>", $content);
$content = str_replace("<p><h2>", "<h2>", $content);
$content = str_replace("<p><h3>", "<h3>", $content);
$content = str_replace("<p><h4>", "<h4>", $content);
$content = str_replace("<p><h5>", "<h5>", $content);
$content = str_replace("<p><h6>", "<h6>", $content);
$content = str_replace("<p><ul>", "<ul>", $content);
$content = str_replace("<p><ol>", "<ol>", $content);
return $content;
}
function format_html_end($content)
{
$content = str_replace("</h1></p>", "</h1>", $content);
$content = str_replace("</h2></p>", "</h2>", $content);
$content = str_replace("</h3></p>", "</h3>", $content);
$content = str_replace("</h4></p>", "</h4>", $content);
$content = str_replace("</h5></p>", "</h5>", $content);
$content = str_replace("</h6></p>", "</h6>", $content);
$content = str_replace("</ul></p>", "</ul>", $content);
$content = str_replace("</ol></p>", "</ol>", $content);
return $content;
}
?>
<?php
$con = mysql_connect("localhost","username","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("db", $con);
$result = mysql_query("SELECT column FROM table WHERE id = '1'");
while($row = mysql_fetch_array($result))
{
$content = $row['column'];
echo format_html_end(format_html("$content</p>"));
}
mysql_close($con);
?>
表格中的内容将如下所示...
<h1>Header</h1>
ertertert
ertertertert
rhdfgh
dfghdfghdfgh
ddfgh
<ul>
<li>fdghdfghd</li>
<li>fghjfghj</li>
</ul>
【问题讨论】:
-
您真正想要完成的是什么?除非有 pre 标记,否则新行仅被视为空白并与 HTML 中的其他空白压缩。
-
您删除的
<p>比相应的</p>多。代码看起来很糟糕。我相信你会遇到标签匹配问题 -
我对 php 还很陌生,所以不太确定所有可用的 php 函数......我问是否有更好的方法来做到这一点?
标签: php mysql text formatting