Gå til innhold

Script for å rydde opp i HTML output


Anbefalte innlegg

Allright, jeg har laget en tøff liten scriptfunksjon her..

 

Du har sikkert irritert deg over rotete HTML-kode før, uten ordentlig indentering (Setting av tabs eller mellomrom etter åpningstags og vice-versa)

 

Her er en PHP-funksjon som rydder opp i HTML-kode, uansett hvor stygg den er. Fikk ideen i går kveld, og nå er den her :p

Koden burde være godt dokumentert, men spør gjerne hvis dere lurer :)

 

PS: Dere kan se resultatet av et dokument scriptet har kjørt gjennom ved å se på source @ http://jons.moo.no

 

PPS: :p Denne koden er også postet i tråden på toppen, men vil gjerne ha feedback, så da poster jeg en ny tråd også :)

 

<?php

//Function to seperate multiple tags one line
function fix_newlines_for_clean_html($fixthistext)
{
   $fixthistext_array = explode("\n", $fixthistext);
   foreach ($fixthistext_array as $unfixedtextkey => $unfixedtextvalue)
   {
       //Makes sure empty lines are ignores
       if (!preg_match("/^(\s)*$/", $unfixedtextvalue))
       {
           $fixedtextvalue = preg_replace("/>(\s|\t)*</U", ">\n<", $unfixedtextvalue);
           $fixedtext_array[$unfixedtextkey] = $fixedtextvalue;
       }
   }
   return implode("\n", $fixedtext_array);
}

function clean_html_code($uncleanhtml)
{
   //Uses previous function to seperate tags
   $fixed_uncleanhtml = fix_newlines_for_clean_html($uncleanhtml);
   $uncleanhtml_array = explode("\n", $fixed_uncleanhtml);
   //Sets no indentation
   $indentlevel = 0;
   //Sets wanted indentation
   $indent = "    ";
   foreach ($uncleanhtml_array as $uncleanhtml_key => $currentuncleanhtml)
   {
       //Removes all indentation
       $currentuncleanhtml = preg_replace("/\t+/", "", $currentuncleanhtml);
       $currentuncleanhtml = preg_replace("/^\s+/", "", $currentuncleanhtml);
       
       $replaceindent = "";
       
       //Sets the indentation from current indentlevel
       for ($o = 0; $o < $indentlevel; $o++)
       {
           $replaceindent .= $indent;
       }
       
       //If self-closing tag, simply apply indent
       if (preg_match("/<(.+)\/>/", $currentuncleanhtml))
       { 
           $cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
       }
       //If doctype declaration, simply apply indent
       else if (preg_match("/<!(.*)>/", $currentuncleanhtml))
       { 
           $cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
       }
       //If opening AND closing tag on same line, simply apply indent
       else if (preg_match("/<[^\/](.*)>/", $currentuncleanhtml) && preg_match("/<\/(.*)>/", $currentuncleanhtml))
       { 
           $cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
       }
       //If closing HTML tag or closing JavaScript clams, decrease indentation and then apply the new level
       else if (preg_match("/<\/(.*)>/", $currentuncleanhtml) || preg_match("/^(\s|\t)*\}{1}(\s|\t)*$/", $currentuncleanhtml))
       {
           $indentlevel--;
           $replaceindent = "";
           for ($o = 0; $o < $indentlevel; $o++)
           {
               $replaceindent .= $indent;
           }
           
           $cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
       }
       //If opening HTML tag AND not a stand-alone tag, or opening JavaScript clams, increase indentation and then apply new level
       else if ((preg_match("/<[^\/](.*)>/", $currentuncleanhtml) && !preg_match("/<(link|meta|base|br|img|hr)(.*)>/", $currentuncleanhtml)) || preg_match("/^(\s|\t)*\{{1}(\s|\t)*$/", $currentuncleanhtml))
       {
           $cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
           
           $indentlevel++;
           $replaceindent = "";
           for ($o = 0; $o < $indentlevel; $o++)
           {
               $replaceindent .= $indent;
           }
       }
       else
       //Else, only apply indentation
       {$cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;}
   }
   //Return single string seperated by newline
   return implode("\n", $cleanhtml_array);    
}
?>

 

Funksjonen brukes ved å skrive clean_html_code(HTML-kode-som-string)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...