从 HTML 中删除空格

2022-08-30 13:21:06

我有这样的HTML代码:

<div class="wrap">
    <div>
        <div id="hmenus">
            <div class="nav mainnavs">
                <ul>
                    <li><a id="nav-questions" href="/questions">Questions</a></li>
                    <li><a id="nav-tags" href="/tags">Tags</a></li>
                    <li><a id="nav-users" href="/users">Users</a></li>
                    <li><a id="nav-badges" href="/badges">Badges</a></li>
                    <li><a id="nav-unanswered" href="/unanswered">Unanswered</a></li>
                </ul>
            </div>
        </div>
    </div>
</div>

如何通过PHP删除标签之间的空格?

我们应该得到:

<div class="wrap"><div><div id="hmenus"><div class="nav mainnavs"><ul><li><a id="nav-questions" href="/questions">Questions</a></li><li><a id="nav-tags" href="/tags">Tags</a></li><li><a id="nav-users" href="/users">Users</a></li><li><a id="nav-badges" href="/badges">Badges</a></li><li><a id="nav-unanswered" href="/unanswered">Unanswered</a></li></ul></div></div></div></div>

答案 1

$html = preg_replace('~>\s+<~', '><', $html);

但我看不出这有什么意义。如果您尝试缩小数据大小,则有更好的选择。


答案 2

自从第一次提出这个问题以来已经有一段时间了,但我仍然认为有必要发布这个答案,以帮助人们解决同样的问题。

这些解决方案都没有被我采用,因此我想出了这个解决方案:使用.output_buffer

该函数接受回调作为参数,该参数在输出整个字符串之前应用于整个字符串。因此,如果在刷新输出之前从字符串中删除空格,则操作已完成。ob_start

/** 
 * Remove multiple spaces from the buffer.
 * 
 * @var string $buffer
 * @return string
 */
function removeWhitespace($buffer)
{
    return preg_replace('/\s+/', ' ', $buffer);
}

ob_start('removeWhitespace');

<!DOCTYPE html>
<html>
    <head></head>
    <body></body>
</html>

ob_get_flush();

上面的内容是这样的:

<!DOCTYPE html> <html> <head> </head> <body> </body> </html>

希望有所帮助。

如何在OOP中使用它

如果在 PHP 中使用面向对象的代码,则可能需要使用对象内部的回调函数。

如果你有一个调用的类,例如HTML,你必须使用此代码行

ob_start(["HTML","removeWhitespace"]); 

推荐