Fiz um código super simples, para deixar qualquer HTML em uma única linha, sem tabs, espaços, .
Sobre o CSS Eu já escrevi o post Eu vs cache. Ganhei a batalha. Vou usar o projeto do Trabalhando com URL amigável no PHP para edita-lo e compactar o HTML dele.
Um dos segredos deste projeto é que todas as requisições passam pelo index.php graças ao direcionamento do .htaccess.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L]
Então, neste index.php devo adicionar o chamado da função ob_start() antes de qualquer saída HTML. No meu caso vou adiciona-lo na linha 2, após o <?php .
<?php ob_start(); require "classes/Url.class.php"; ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br"> <head> .....
O que o ob_start() faz?
Esta função irá ativar o buffer de saída. Enquanto o buffer de saída estiver ativo, não é enviada a saída do script (outros que não sejam cabeçalhos), ao invés a saída é guardada em um buffer interno.
O conteúdo deste buffer interno pode ser copiado em uma variável usando ob_get_contents(). Para enviar o que esta no buffer interno, use ob_end_flush(). Alternativamente, ob_end_clean() irá silenciosamente descartar o conteúdo do buffer.
Então esta função manda guardar tudo que é HTML que deveria ser enviado para o browser para poder ser tratado depois. Então agora com este HTML guardado podemos analisar, editar e fazer o que for preciso. Então na última linha do nosso index vou adicionar as seguintes linhas:
$html = ob_get_clean ();
echo preg_replace('/\s+/', ' ', $html);
A função ob_get_clean obtém o conteúdo do buffer e exclui o buffer de saída atual e neste buffer esta todo o HTML que foi gerado pelo site/sistema/blog.
A segunda linha faz um replace de tudo que for espaço, quebra de linha (\n e \r) e tabulação (\t)por um espaço. Então as centenas de espaços que existe para indentar seu código serão removidos por um único espaço.
E, por fim nosso index.php fica assim:
<?php
ob_start();
require "classes/Url.php";
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Trabalhando com URL amigável no PHP</title>
<meta name="author" content="Layout: Mauricio Samy Silva / Código: Eduardo Kraus" />
<link rel="stylesheet" type="text/css" href="<?php echo URL::getBase() ?>css/style.css"/>
</head>
<body>
<div id="tudo">
<div id="topo">TOPO</div>
<div id="principal">
<?php
$modulo = Url::getURL( 0 );
if( $modulo == null )
$modulo = "modulo1";
if( file_exists( "modulos/" . $modulo . ".php" ) )
require "modulos/" . $modulo . ".php";
else
require "modulos/404.php";
?>
</div>
<div id="navegacao">
<p><a href="<?php echo URL::getBase(); ?>modulo1">Módulo 1</a></p>
<p><a href="<?php echo URL::getBase(); ?>modulo2">Módulo 2</a></p>
<p><a href="<?php echo URL::getBase(); ?>modulo3">Módulo 3</a></p>
<p><a href="<?php echo URL::getBase(); ?>modulo4">Módulo 4</a></p>
<p><a href="<?php echo URL::getBase(); ?>modulo5">Módulo 5</a></p>
<p><a href="<?php echo URL::getBase(); ?>modulo6">Módulo 6</a></p>
<p><a href="<?php echo URL::getBase(); ?>modulo7">Módulo 7</a></p>
<p><a href="<?php echo URL::getBase(); ?>modulo8/parametro/sei-la/alguma_coisa/25/quase-nada">
Módulo 8 com sub-módulo</a></p>
<p><a href="<?php echo URL::getBase(); ?>qualquer">Módulo 404</a></p>
<p><a href="<?php echo URL::getBase(); ?>teste.php">Teste.php</a></p>
</div>
<div id="rodape">RODAPE</div>
</div>
</body>
</html>
<?php
$html = ob_get_clean ();
echo preg_replace('/\s+/', ' ', $html);
Veja o exemplo rodando completo em /code/10045/ e não se esqueça de olhar o código fonte dele.
Quer o código fonte completo deste exemplo? Clique aqui.
Se você usa Wordpress, edite o arquivo index.php da raiz do Wordpress e faça assim:
<?php
ob_start();
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php');
$html = ob_get_clean ();
echo preg_replace('/\s+/', ' ', $html);
Veja rodando: view-source:http://www.marcelaroesner.com.br/category/blog