Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie kodu HTML ze znacznika body
Forum PHP.pl > Forum > PHP
sazian
Witam,
natrafiłem na problem którego rozwiązanie początkowo wydawało się bardzo błahe, a jednak baruję się z tym od dłuższego czasu i nic :/

Do rzeczy, mam podany pewien kod HTML i potrzebuję z niego wyciągnąć to co jest wewnątrz znacznika body,
wystarczyła chwilka googlowania i mam gotowy kod
  1.  
  2. function get_inner_html( $node ) {
  3. $innerHTML= '';
  4. $children = $node->childNodes;
  5.  
  6. foreach ($children as $child) {
  7. $innerHTML .= $child->ownerDocument->saveXML( $child );
  8. }
  9.  
  10. return $innerHTML;
  11. }
  12.  
  13. $html='<HTML><HEAD>
  14.  
  15. <BODY>
  16. <P align=center>1111</P>
  17. <br />
  18. <P style="width:100px"></P>
  19.  
  20. </BODY>
  21. </HTML';
  22. $doc = new DOMDocument();
  23. $doc->loadHTML($html);
  24. $node = $doc->getElementsByTagName('body');
  25. echo get_inner_html($node->item(0));
  26.  


kod wynikowy wygląda tak
  1.  
  2. <p align="center">1111</p>
  3. <br/><p/>
  4. <p style="width:100px"/>


Jak widać pierwszy znacznik p oraz br zachowały się prawidłowo, problemem jest drugi i trzeci znacznik znacznik p. Jeśli znaczniki zostaną zapisane w taki sposób i wyświetlę je w przeglądarce to cały kod się rozwala bo przeglądarka uznaje że te znaczniki nie mają zamknięć.

Oczywiście DOMDocument ma opcję wymuszającą tworzenie domknięć ale jak ją dodam to tworzy mi <br></br> sad.gif


Pomożecie ? smile.gif
trueblue
Skąd się u Ciebie wzięło stylowanie <p>?

  1. $dom=new DomDocument();
  2. $previous_value = libxml_use_internal_errors(true);
  3. $dom->loadHTML($html);
  4. $body=$dom->saveHTML($dom->getElementsByTagName('body')->item(0));
  5.  
  6. echo htmlentities(preg_replace('~<(?:!DOCTYPE|/?(?:html|head|body))[^>]*>\s*~iu','',$body));
sazian
fakt później to dopisałem i widocznie nie przekopiowałem.

Kurde pamiętam że jeszcze nie tak dawno kombinowałem coś w ten deseń i za pieruna nie chciało działać tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.