print_r online indentar beautify beatifuer array php html format tidy

online - PHP "bonita impresión" HTML(no ordenado)



prettify html php (3)

Cuando tuve un montón de espacio de nombres de nombres de nombres de nombres con el nombre HTML tidyHTML no me gustó, me encontré con esto:

http://gdatatips.blogspot.com/2008/11/xml-php-pretty-printer.html

Estoy usando la extensión DOM en PHP para compilar algunos documentos HTML, y quiero que el resultado se formatee muy bien (con nuevas líneas y sangrías) para que sea legible, sin embargo, de las muchas pruebas que he hecho:

  1. "formatOutput = true" no funciona en absoluto con saveHTML (), solo saveXML ()
  2. Incluso si utilicé saveXML (), solo funciona en elementos creados a través del DOM, no elementos que están incluidos con loadHTML (), incluso con "preserveWhiteSpace = false"

Si alguien sabe de otra manera, me gustaría saber cómo lo hicieron funcionar.

Entonces, tengo un documento DOM, y estoy usando saveHTML () para generar el HTML. Como proviene del DOM, sé ​​que es válido, no es necesario "poner en orden" o validarlo de ninguna manera.

Simplemente estoy buscando una forma de obtener un buen resultado de formato de la salida que recibo de la extensión DOM.

NÓTESE BIEN. Como habrás adivinado, no quiero usar la extensión Tidy como a) hace mucho más que yo también la necesito (el marcado ya es válido) yb) realmente hace cambios al contenido HTML (como el tipo de documento HTML 5 y algunos elementos).

Seguir:

OK, con la ayuda de la respuesta siguiente, he resuelto por qué la extensión DOM no funcionaba. Aunque el ejemplo dado funciona, todavía no funcionaba con mi código. Con la ayuda de este comentario, descubrí que si tiene nodos de texto donde isWhitespaceInElementContent () es verdadero, no se aplicará ningún formato más allá de ese punto. Esto sucede independientemente de si preserveWhiteSpace es falso o no. La solución es eliminar todos estos nodos (aunque no estoy seguro si esto puede tener efectos adversos sobre el contenido real).


Puede usar el código para la función hl_tidy de la biblioteca htmLawed .

// indent using one tab per indent, with all HTML being within an imaginary div $out = hl_tidy($in, ''t'', ''div'')


tienes razón, parece que no hay indentación para HTML ( otros también están confundidos ). XML funciona, incluso con código cargado.

<?php function tidyHTML($buffer) { // load our document into a DOM object $dom = new DOMDocument(); // we want nice output $dom->preserveWhiteSpace = false; $dom->loadHTML($buffer); $dom->formatOutput = true; return($dom->saveHTML()); } // start output buffering, using our nice // callback function to format the output. ob_start("tidyHTML"); ?> <html> <head> <title>foo bar</title><meta name="bar" value="foo"><body><h1>bar foo</h1><p>It''s like comparing apples to oranges.</p></body></html> <?php // this will be called implicitly, but we''ll // call it manually to illustrate the point. ob_end_flush(); ?>

resultado:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <title>foo bar</title> <meta name="bar" value="foo"> </head> <body> <h1>bar foo</h1> <p>It''s like comparing apples to oranges.</p> </body> </html>

lo mismo con saveXML () ...

<?xml version="1.0" standalone="yes"?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <title>foo bar</title> <meta name="bar" value="foo"/> </head> <body> <h1>bar foo</h1> <p>It''s like comparing apples to oranges.</p> </body> </html>

probablemente se olvidó de mantener preserveWhiteSpace = false antes de loadHTML?

descargo de responsabilidad: robé la mayor parte del código de demostración de los comentarios manuales de tyson clugg / php . flojo yo.

ACTUALIZACIÓN: ahora recuerdo que hace algunos años intenté lo mismo y encontré el mismo problema. Lo solucioné aplicando una solución sucia (no era crítico para el rendimiento): de alguna manera me convertí entre SimpleXML y DOM hasta que el problema desapareció. supongo que la conversión eliminó esos nodos. tal vez cargar con dom, importar con simplexml_import_dom , luego dar salida a la cadena, analizar esto con DOM de nuevo y luego imprimirlo bonito. por lo que recuerdo, esto funcionó (pero fue muy lento).