0

我已经生成了用于缓存加载的 PHP 文件(通过 file_get_contents() 或 include() 随机程序...),让我们考虑这个例子:

未优化模式或未缓存:

我不想看到的:

  • <body>和之间的空格<head>
  • 封闭标签之间的空格:/> <script<table> <tr>

我想看到的(可能使用 PHP 的优化方式PREG_REPLACE):

  • 标签之间的修剪空间<body><head>
  • 封闭标签之间的修剪空间:/><script<table><tr>

对于上面的完整示例,应为 RESULT,例如:

<!DOCTYPE><head><link href="/static/css/main.css" rel="stylesheet" type="text/css"><title>Title</title><meta http-equiv='Content-Type' content='Type=text/html; charset=UTF-8'> <meta name="description" content="Description site" /><meta name="keywords" content="keywords, another keywords" /><script type="text/javascript" src="/static/js/jquerymin.js"></script></head><body><div id="center_box"><div id="orderdata"><table></table></div><div id="orderform"><form method="post" action="/frontacp" method="post" action="/frontacp" method="post" action="/frontacp" method="post" action="/frontacp"><div class="logincol"><div class="leftcol"><label for="types_name">Tip proizvoda</label></div><div class="rightcol"><input type="text" name="types_name" /></form></div></div></body></html>

而是页面的BAD(未优化使用):

    <!DOCTYPE><head>
    <link href="/static/css/main.css" rel="stylesheet" type="text/css"><title>Title</title>
    <meta http-equiv='Content-Type' content='Type=text/html; charset=UTF-8'> <meta name="description" content="Description site" /><meta name="keywords" content="keywords, another keywords" /><script type="text/javascript" src="/static/js/jquerymin.js"></script></head>
    <body><div id="center_box">
        <div id="orderdata">
        <table>

        </table>
        </div>

        <div id="orderform">
        <form method="post" action="/frontacp" method="post" action="/frontacp" method="post" action="/frontacp" method="post" action="/frontacp"><div class="logincol"><div class="leftcol"><label for="types_name">Tip proizvoda</label></div><div class="rightcol"><input type="text" name="types_name"    /></form>    </div>
    </div></body></html>

解决方案: PHP 示例使用正确的方法来修剪此问题,并且不会修剪内部 HTML 标记的空格。

注意:我已经完成了读取缓存和渲染这个问题,这个问题不会涉及到这个区域。

谢谢你。

4

2 回答 2

0

这应该工作

$document = preg_replace( '/\n/', '', $document );
$document = preg_replace( '/>\s+</', '><', $document );
$document = preg_replace( '/\s{2,}/', ' ', $document );

再见

于 2012-10-17T14:17:33.447 回答
0

这比人们想象的要复杂一些,它在这里提出了很多问题。我冒昧地找到了一个似乎有适当解决方案的解决方案:

minifying-final-html-output-using-regular-expressions-with-codeigniter

(只需忽略 CodeIgniter 的引用,因为解决方案只是一个正则表达式)

于 2012-10-17T14:28:28.910 回答