⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f_fixhtml.php

📁 很棒的在线教学系统
💻 PHP
字号:
<?php // $Id: f_fixhtml.php,v 1.7 2007/05/08 16:12:10 poltawski Exp $/*   This filter plugin implements minimal html tag balancing, and can also   convert ewiki_page() output into (hopefully) valid xhtml. It just works   around some markup problems found in ewiki and that may arise from Wiki   markup abuse; it however provides no fix for <ul> inside <ul> or even   <h2> inside <p> problems (this should rather be fixed in the ewiki_format   function).  So following code is not meant to fix any possible html file,   and it certainly won't make valid html files out of random binary data.    So for full html spec conformance you should rather utilize w3c tidy (by   using your Webservers "Filter" directive).*/define("EWIKI_XHTML", 1);$ewiki_plugins["page_final"][] = "ewiki_html_tag_balancer";function ewiki_html_tag_balancer(&$html) {   #-- vars   $html_standalone = array(      "img", "br", "hr",      "input", "meta", "link",   );   $html_tags = array(      "a", "abbr", "acronym", "address", "applet", "area", "b", "base",      "basefont", "bdo", "big", "blockquote", "body", "br", "button",      "caption", "center", "cite", "code", "col", "colgroup", "dd", "del",      "dfn", "dir", "div", "dl", "dt", "em", "fieldset", "font", "form",      "h1", "h2", "h3", "h4", "h5", "h6", "head", "hr", "html", "i",      "iframe", "img", "input", "ins", "kbd", "label", "legend", "li",      "link", "map", "menu", "meta", "noframes", "noscript", "object", "ol",      "optgroup", "option", "p", "param", "pre", "q", "s", "samp", "script",      "select", "small", "span", "strike", "strong", "style", "sub", "sup",      "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "title",      "tr", "tt", "u", "ul", "var",      #-- H2.0  "nextid", "listing", "xmp", "plaintext",      #-- H3.2  "frame", "frameset",      #-- X1.1  "rb", "rbc", "rp", "rt", "rtc", "ruby",   );   $close_opened_when = array(      "p", "div", "ul", "td", "table", "tr",   );   if (!EWIKI_XHTML) {      $html_tags = array_merge(  (array) $html_tags, array(         "bgsound", "embed", "layer", "multicol", "nobr", "noembed",      ));   }   #-- walk through all tags   $tree = array();   $len = strlen($html);   $done = "";   $pos = 0;   $loop = (int)$len / 3;   while (($pos < $len) && $loop--) {      #-- search next tag      $l = strpos($html, "<", $pos);      $r = strpos($html, ">", $l);      if (($l===false) or ($r===false)) {         # finish         $done .= substr($html, $pos);         break;      }      #-- copy plain text part      if ($l >= $pos) {         $done .= substr($html, $pos, $l-$pos);         $pos = $l;      }      #-- analyze current html tag      if ($r >= $pos) {         $pos = $r + 1;         $tag = substr($html, $l + 1, $r - $l - 1);         #-- split into name and attributes         $tname = strtolower(strtok($tag, " \t\n>"));     // LOWERCASING not needed here really         ($tattr = strtok(">")) && ($tattr = " $tattr");         // attribute checking could go here         // (here we just assume good output from ewiki core)         // ...         #-- html comment         if (substr($tname, 0, 3) == "!--") {            $r = strpos($html, "-->", $l+4);            $pos = $r + 3;            $done .= substr($html, $l, $r-$l+3);            continue;         }         #-- opening tag?         elseif ($tname[0] != "/") {            #-- cdata            if($tname=='![cdata[') {                $tname = strtoupper($tname); // Needs to be uppercase for XHTML compliance                // LEAVE THE POOR THING ALONE!            }            #-- standalone tag            else if (in_array($tname, $html_standalone)) {               $tattr = rtrim(rtrim($tattr, "/"));               if (EWIKI_XHTML) {                  $tattr .= " /";               }            }            #-- normal tag            else {               if (in_array($tname, $html_tags)) {                  #-- ok               }               else {                  #$tattr .= " class=\"$tname\"";                  #$tname = "div";               }               array_push($tree, $tname);            }            $tag = "$tname$tattr";         }         #-- closing tag         else {            $tname = substr($tname, 1);            if (!in_array($tname, $html_tags)) {               $tname= "div";            }            #-- check if this is allowed            if (!$tree) {               continue;   // ignore closing tag            }            $last = array_pop($tree);            if ($last != $tname) {               #-- close until last opened block element               if (in_array($tname, $close_opened_when)) {                  do {                     $done .= "</$last>";                  }                  while (($last = array_pop($tree)) && ($last!=$tname));               }               #-- close last, close current, reopen last               else {                  array_push($tree, $last);                  $done .= "</$last></$tname><$last>";                  continue;               }            }            else {               #-- all ok            }            #-- readd closing-slash to tag name            $tag = "/$tname";         }         $done .= "<$tag>";      }   }   #-- close still open tags   while ($tree && ($last = array_pop($tree))) {      $done .= "</$last>";   }   #-- copy back changes   $html = $done;}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -