Jonhoo Skrevet 27. april 2006 Rapporter Del Skrevet 27. april 2006 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 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: 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå