una ultimo saltos reemplazar quitar ltrim linea funcion espacios espacio eliminar caracteres cadena blanco agregar php html css whitespace

php - ultimo - Eliminar espacios en blanco de html



ltrim php (13)

Como la publicación de gpupo proporcionó la solución más limpia para muchos tipos diferentes de formato de espaciado. Sin embargo, una pieza menor pero importante fue olvidada al final. Un último ajuste de cuerda :-p

A continuación hay una solución probada y funcional.

function compress_html($content) { $i = 0; $content = preg_replace(''~>/s+<~'', ''><'', $content); $content = preg_replace(''//s/s+/'', '' '', $content); while ($i < 5) { $content = str_replace('' '', '' '', $content); $i++; } return trim($content); }

Tengo un código html como:

<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>

Cómo eliminar el espacio en blanco entre las etiquetas de php?

Deberíamos obtener:

<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>


Gracias por publicar esta pregunta. El problema es, de hecho, lidiar con errores de espacio en blanco en ciertos entornos. Si bien la solución de expresiones regulares funciona en el caso general, para un hack rápido, elimine los espacios en blanco iniciales y agregue etiquetas al final de cada línea. PHP elimina la nueva línea después de un cierre?>. P.ej:

<ul><?php ?> <li><a id="nav-questions" href="/questions">Questions</a></li><?php ?> <li><a id="nav-tags" href="/tags">Tags</a></li><?php ?> <li><a id="nav-users" href="/users">Users</a></li><?php ?> <li><a id="nav-badges" href="/badges">Badges</a></li><?php ?> <li><a id="nav-unanswered" href="/unanswered">Unanswered</a></li><?php ?> </ul>

Obviamente, esto no es óptimo por una variedad de razones, pero funcionará para un problema localizado sin afectar toda la cadena de herramientas.


Ha pasado un tiempo desde que se hizo esta pregunta por primera vez, pero todavía veo la necesidad de publicar esta respuesta para ayudar a las personas con el mismo problema.

Ninguna de estas soluciones fue adoptabe para mí, por lo tanto, se me ocurrió esta solución: Usar output_buffer .

La función ob_start acepta una devolución de llamada como un argumento que se aplica a toda la cadena antes de su salida. Por lo tanto, si elimina el espacio en blanco de la cadena antes de enjuagar la salida, ya está listo.

/** * 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();

Lo anterior imprimiría algo así como:

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

Espero que ayude.

CÓMO UTILIZARLO EN OOP

Si está utilizando código orientado a objetos en PHP, puede utilizar una función de devolución de llamada que se encuentre dentro de un objeto.

Si tiene una clase llamada, por ejemplo HTML , tiene que usar esta línea de código

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


La array reduce función:

$html = explode("/n", $html); function trimArray($returner, $value) { $returner .= trim($value); return $returner; } echo $html = array_reduce($html, ''trimArray'');


No es necesario.

La compresión GZip es una característica de todos los servidores web modernos, y supera ampliamente cualquier ''ganancia'' que pueda ver al usar esto al entregar contenido.

No lo hagas No tiene sentido. Esto es para lo que gzip fue hecho.


Un reemplazo RegEx podría hacer el truco, algo así como:

$result = preg_replace(''!/s+!smi'', '' '', $content);


Usé esta expresión regular para mí y funciona como un encanto:

preg_replace(''/[ /t]+(?!="|/')/'', '''', $html);

Este patrón busca espacio en blanco y tabulador (al menos uno), que no está seguido de " o '' . Esto es, para evitar eliminar espacios en blanco entre atributos html .


Use expresiones regulares, como:

>(/s).*?<


por si alguien necesita esto, inventé una función de la respuesta de @Martin Angelova y @Savas Vedova, y se me ocurrió

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

Y resolvió mi problema. Nota: No probé un servidor por encima, asegúrese de probarlo antes de usarlo en producción


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

Pero no veo el sentido de esto. Si intenta reducir el tamaño de los datos, hay mejores opciones.


$html = preg_replace(''~>/s*/n/s*<~'', ''><'', $html);

Estoy pensando que esta es la solución al problema <b>Hello</b> <i>world</i> . La idea es eliminar espacios en blanco solo cuando hay una nueva línea. Funcionará para la sintaxis HTML común que es:

<div class="wrap"> <div> </div> </div>


<?php define(COMPRESSOR, 1); function remove_html_comments($content = '''') { return preg_replace(''/<!--(.|/s)*?-->/'', '''', $content); } function sanitize_output($buffer) { $search = array( ''//>[^/S ]+/s'', // strip whitespaces after tags, except space ''/[^/S ]+/</s'', // strip whitespaces before tags, except space ''/(/s)+/s'' // shorten multiple whitespace sequences ); $replace = array( ''>'', ''<'', ''//1'' ); $buffer = preg_replace($search, $replace, $buffer); return remove_html_comments($buffer); } if(COMPRESSOR){ ob_start("sanitize_output"); } ?> <html> <head> <!-- comment --> <title>Example 1</title> </head> <body> <p>This is example</p> </body> </html> RESULT: <html><head><title>Example 1</title></head><body><p>This is example</p></body></html>


//... public function compressHtml($content) { $content = preg_replace(''~>/s+<~'', ''><'', $content); $content = preg_replace(''//s/s+/'', '' '', $content); $i = 0; while ($i < 5) { $content = str_replace('' '', '' '', $content); $i++; } return $content; }