查看完整版本: PHP高亮显示 XML 源代码

铁血霸主 2007-8-2 13:29

PHP高亮显示 XML 源代码

             <p>它将说明如何外部实体指向处理器来包含和解析其它文档,如何处理 PIs,以及一种确定包含有 PIs 的<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%B4%FA%C2%EB');" target="_self"><u><strong>代码</strong></u></a>的可信度。 <P>  能被该范例使用的的 <a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, 'XML');" target="_self"><u><strong>XML</strong></u></a> 文档(xmltest.xml 和 xmltest2.xml)被列在该范例之后。 </P><P>  外部实体范例</P><DIV class=code><P>&lt;?php<BR>$file = "xmltest.xml";</P><P>function trustedFile($file) {<BR>&nbsp;&nbsp; // only trust local files owned by ourselves<BR>&nbsp;&nbsp; if (!eregi("^([a-z]+)://", $file) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; fileowner($file) == getmyuid()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; return false;<BR>}</P><P>function startElement($parser, $name, $attribs) {<BR>&nbsp;&nbsp; print "&amp;lt;&lt;font color=\"#0000cc\"&gt;$name&lt;/font&gt;";<BR>&nbsp;&nbsp; if (sizeof($attribs)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (list($k, $v) = each($attribs)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print " &lt;font color=\"#009900\"&gt;$k&lt;/font&gt;=\"&lt;font <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; color=\"#990000\"&gt;$v&lt;/font&gt;\"";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; print "&amp;gt;";<BR>}</P><P>function endElement($parser, $name) {<BR>&nbsp;&nbsp; print "&amp;lt;/&lt;font color=\"#0000cc\"&gt;$name&lt;/font&gt;&amp;gt;";<BR>}</P><P>function characterData($parser, $data) {<BR>&nbsp;&nbsp; print "&lt;b&gt;$data&lt;/b&gt;";<BR>}</P><P>function PIHandler($parser, $target, $data) {<BR>&nbsp;&nbsp; switch (strtolower($target)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, 'php');" target="_self"><u><strong>php</strong></u></a>\":<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; global $parser_file;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // If the parsed document is "trusted", we say it is safe<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // to execute PHP code inside it.&nbsp; If not, display the code<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // instead.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (trustedFile($parser_file[$parser])) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval($data);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Untrusted PHP code: &lt;i&gt;%s&lt;/i&gt;", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htmlspecialchars($data));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp; }<BR>}</P><P>function defaultHandler($parser, $data) {<BR>&nbsp;&nbsp; if (substr($data, 0, 1) == "&amp;" &amp;&amp; substr($data, -1, 1) == ";") {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf('&lt;font color="#aa00aa"&gt;%s&lt;/font&gt;', <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htmlspecialchars($data));<BR>&nbsp;&nbsp; } else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf('&lt;font size="-1"&gt;%s&lt;/font&gt;', <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htmlspecialchars($data));<BR>&nbsp;&nbsp; }<BR>}</P><P>function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $publicId) {<BR>&nbsp;&nbsp; if ($systemId) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!list($parser, $fp) = new_xml_parser($systemId)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Could not open entity %s at %s\n", $openEntityNames,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $systemId);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ($data = fread($fp, 4096)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!xml_parse($parser, $data, feof($fp))) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("XML error: %s at line %d while parsing entity %s\n",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml_error_string(xml_get_error_code($parser)),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml_get_current_line_number($parser), $openEntityNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml_parser_free($parser);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml_parser_free($parser);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; return false;<BR>}</P><P>function new_xml_parser($file) {<BR>&nbsp;&nbsp; global $parser_file;</P><P>&nbsp;&nbsp; $xml_parser = xml_parser_create();<BR>&nbsp;&nbsp; xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);<BR>&nbsp;&nbsp; xml_set_element_handler($xml_parser, "startElement", "endElement");<BR>&nbsp;&nbsp; xml_set_character_data_handler($xml_parser, "characterData");<BR>&nbsp;&nbsp; xml_set_processing_instruction_handler($xml_parser, "PIHandler");<BR>&nbsp;&nbsp; xml_set_default_handler($xml_parser, "defaultHandler");<BR>&nbsp;&nbsp; xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; if (!($fp = @fopen($file, "r"))) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; if (!is_array($parser_file)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settype($parser_file, "array");<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; $parser_file[$xml_parser] = $file;<BR>&nbsp;&nbsp; return array($xml_parser, $fp);<BR>}</P><P>if (!(list($xml_parser, $fp) = new_xml_parser($file))) {<BR>&nbsp;&nbsp; die("could not open XML input");<BR>}</P><P>print "&lt;pre&gt;";<BR>while ($data = fread($fp, 4096)) {<BR>&nbsp;&nbsp; if (!xml_parse($xml_parser, $data, feof($fp))) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; die(sprintf("XML error: %s at line %d\n",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml_error_string(xml_get_error_code($xml_parser)),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xml_get_current_line_number($xml_parser)));<BR>&nbsp;&nbsp; }<BR>}<BR>print "&lt;/pre&gt;";<BR>print "parse complete\n";<BR>xml_parser_free($xml_parser);<BR>?&gt;&nbsp; <BR>&nbsp;<BR></P>
页: [1]
查看完整版本: PHP高亮显示 XML 源代码
PageRank