您好,欢迎访问一九零五行业门户网

PHP高亮显示 XML 源代码

它将说明如何外部实体指向处理器来包含和解析其它文档,如何处理 pis,以及一种确定包含有 pis 的代码的可信度。
能被该范例使用的的 xml 文档(xmltest.xml 和 xmltest2.xml)被列在该范例之后。
外部实体范例
$v\;
       }
   }
   print >;
}
function endelement($parser, $name) {
   print $name>;
}
function characterdata($parser, $data) {
   print $data;
}
function pihandler($parser, $target, $data) {
   switch (strtolower($target)) {
       case php:
           global $parser_file;
           // if the parsed document is trusted, we say it is safe
           // to execute php code inside it.  if not, display the code
           // instead.
           if (trustedfile($parser_file[$parser])) {
               eval($data);
           } else {
               printf(untrusted php code: %s,
                       htmlspecialchars($data));
           }
           break;
   }
}
function defaulthandler($parser, $data) {
   if (substr($data, 0, 1) == & && substr($data, -1, 1) == ;) {
       printf('%s',
               htmlspecialchars($data));
   } else {
       printf('%s',
               htmlspecialchars($data));
   }
}
function externalentityrefhandler($parser, $openentitynames, $base, $systemid,
                                 $publicid) {
   if ($systemid) {
       if (!list($parser, $fp) = new_xml_parser($systemid)) {
           printf(could not open entity %s at %s\n, $openentitynames,
                   $systemid);
           return false;
       }
       while ($data = fread($fp, 4096)) {
           if (!xml_parse($parser, $data, feof($fp))) {
               printf(xml error: %s at line %d while parsing entity %s\n,
                       xml_error_string(xml_get_error_code($parser)),
                       xml_get_current_line_number($parser), $openentitynames);
               xml_parser_free($parser);
               return false;
           }
       }
       xml_parser_free($parser);
       return true;
   }
   return false;
}
function new_xml_parser($file) {
   global $parser_file;
   $xml_parser = xml_parser_create();
   xml_parser_set_option($xml_parser, xml_option_case_folding, 1);
   xml_set_element_handler($xml_parser, startelement, endelement);
   xml_set_character_data_handler($xml_parser, characterdata);
   xml_set_processing_instruction_handler($xml_parser, pihandler);
   xml_set_default_handler($xml_parser, defaulthandler);
   xml_set_external_entity_ref_handler($xml_parser, externalentityrefhandler);
if (!($fp = @fopen($file, r))) {
       return false;
   }
   if (!is_array($parser_file)) {
       settype($parser_file, array);
   }
   $parser_file[$xml_parser] = $file;
   return array($xml_parser, $fp);
}
if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
   die(could not open xml input);
}
print
;
while ($data = fread($fp, 4096)) {
   if (!xml_parse($xml_parser, $data, feof($fp))) {
       die(sprintf(xml error: %s at line %d\n,
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
}
print
;
print parse complete\n;
xml_parser_free($xml_parser);
?>
xmltest.xml
]>
title &plainentity;
a1b1c1
     a2c2
     a3b3c3
&systementity;
about this document
以下文档将被 xmltest.xml 文件调用: xmltest2.xml
]>
&testent;
其它类似信息

推荐信息