从html中删除空格

Jam*_*mes 35 html css php whitespace

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

如何通过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>
Run Code Online (Sandbox Code Playgroud)

Cze*_*ogy 51

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

但我没有看到这一点.如果您尝试使数据量更小,则有更好的选择.

  • 遗憾的是,这将"<b> Hello </ b> <i> world </ i>"更改为"<b> Hello </ b> <i> world </ i>".检测空白区域是否有意义几乎是不可能的(内联和块级元素列表将很方便). (16认同)
  • 好吧,没有其他人看到一个观点,其他人在盒子外面看到了很多......:D这个正则表达式对我来说很完美. (2认同)

Sav*_*ova 10

自问这个问题以来已经有一段时间了,但我仍然认为有必要发布这个答案,以帮助有同样问题的人.

我没有采用这些解决方案,因此我提出了这个解决方案:使用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();
Run Code Online (Sandbox Code Playgroud)

以上将打印如下:

<!DOCTYPE html> <html> <head> </head> <body> </body> </html>
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

如何在OOP中使用它

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

如果您有一个名为HTML的类,则必须使用此代码行

ob_start(["HTML","removeWhitespace"]); 
Run Code Online (Sandbox Code Playgroud)

  • 萨瓦斯(Savas),这是否还会删除您需要的空间?说:“ &lt;div&gt;我这里需要空格。&lt;/ div&gt; &lt;div&gt;在此div之前有一个要删除的空间。&lt;/ div&gt;` (2认同)

P.M*_*P.M 5

以防万一有人仍然需要这个,我从@Martin Angelova 的回复和@Savas Vedova 中创造了一个函数,同样解决了我的问题的结果如下:

<?php 
   function rmspace($buffer){ 
        return preg_replace('~>\s*\n\s*<~', '><', $buffer); 
   };
?>
<?php ob_start("rmspace");  ?>
   //Content goes in here 
<?php ob_end_flush(); ?>
Run Code Online (Sandbox Code Playgroud)

注意:我没有在生产环境中测试性能损失


Inc*_*ito -4

我无法删除这个答案,但它不再相关了,网络格局在 8 年内发生了很大变化,以至于它变得毫无用处。

  • 谷歌(在性能方面非常合格)通过他们的页面速度工具建议,这是值得做的。当您使用 GZIP 时,它会压缩多余的不必要的空间。显然,如果您在进行 GZIP 压缩之前删除这些空格,那么输出当然会更小且更高效。答案是两者皆有! (30认同)
  • 这是真实的。真正的问题在于规模和所需的努力。请记住,您的时间是有限的,您的产品也是有限的。如果您每月为 200kb 的 html 内容提供 1000 次点击,请不要担心。如果您每月在 5mb 的 HTML 内容上提供 100 万次点击,请以前所未有的方式进行优化。如果您有时间作为奢侈并且想学习如何做到这一点,请继续,但是去除空白以节省 50% 而不是 40% 在许多地方不会给您带来回报,除了 ySlow 之外。 (3认同)
  • @replete 是的,它下降到高达 183b,小了整整 19b。这就是我所说的,在 1 000 000 次页面浏览之后,您在这种情况下节省的空间将是 18 MB,并且您最终会破坏所有 PRE 标签内容。同样,您不需要删除 HTML 文件的格式,服务器会处理这个问题。您为什么要自行编辑文件?所有这些优化都应该由网络服务器完成,这就是它的构建目的。 (3认同)
  • 我建议这个答案被否决,因为它是不正确的。http://stackoverflow.com/questions/807119/gzip-versus-minify (2认同)
  • 我用谷歌搜索的所有内容,都会得到这样可怕的答案。就像人们根本不考虑别人的需求一样。也许他们问这个问题的原因与缩小网站不同?例如,我必须在数据库中保存一些模板。我只是想压缩数据库的 html,而不是最终的渲染。哎呀。 (2认同)