• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP高亮显示 XML 源代码_PHP

php 搞代码 4年前 (2022-01-25) 17次浏览 已收录 0个评论

它将说明如何外部实体指向处理器来包含和解析其它文档,如何处理 PIs,以及一种确定包含有 PIs 的代码的可信度。

  能被该范例使用的的 XML 文档(xmltest.xml 和 xmltest2.xml)被列在该范例之后。

  外部实体范例

<?php
$file = “xmltest.xml”;

function trustedFile($file) {
// only trust local files owned by ourselves
if (!eregi(“^([a-z] )://”, $file)
&& fileowner($file) == getmyuid()) {
return true;
}
return false;
}

function startElement($parser, $name, $attribs) {
print “<$name“;
if (sizeof($attribs)) {
while (list($k, $v) = each($attribs)) {
print ” $k=\”<font
color=\”#990000\”>$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 “

";<BR>while ($data = fread($fp, 4096)) {<BR>   if (!xml_parse($xml_parser, $data, feof($fp))) {<BR>       die(sprintf("XML error: %s at line %d\n",<BR>                   xml_error_string(xml_get_error_code($xml_parser)),<BR>                   xml_get_current_line_number($xml_parser)));<BR>   }<BR>}<BR>print "

“;
print “parse complete\n”;
xml_parser_free($xml_parser);
?>

  xmltest.xml

<?xml version=’1.0′?>
<!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [


]>

Title &plainEntity;




a1b1c1
a2c2
a3b3c3





&systemEntity;


About this Document


<?php print ‘Hi! This is PHP version ‘.phpversion(); ?>


以下文档将被 xmltest.xml 文件调用: xmltest2.xml

<?xml version=”1.0″?>
<!DOCTYPE foo [

]>


&testEnt;
<?php 本文来源gaodaimacom搞#^代%!码&网*

搞代gaodaima码

print “This is some more PHP code being executed.”; ?>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP高亮显示 XML 源代码_PHP
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址