PHP高亮显示 XML 源代码_PHP
Jun 01, 2016 pm 12:29 PM它将说明如何外部实体指向处理器来包含和解析其它文档,如何处理 PIs,以及一种确定包含有 PIs 的代码的可信度。
能被该范例使用的的 XML 文档(xmltest.xml 和 xmltest2.xml)被列在该范例之后。
外部实体范例
$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=\" 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);
?>
]>
&systemEntity;
以下文档将被 xmltest.xml 文件调用: xmltest2.xml
]>
&testEnt;

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk mengalih keluar berita dan kandungan sohor kini daripada Carian Windows 11

Apakah perbezaan antara Huawei GT3 Pro dan GT4?

Mod siap sedia iOS 17 menukarkan iPhone yang sedang mengecas menjadi hab rumah

Tutorial mengemas kini versi curl di bawah Linux!

Panduan Pengguna Windows 11: Bagaimana untuk melumpuhkan pop timbul iklan

Betulkan: Alat snipping tidak berfungsi dalam Windows 11

Sebab dan penyelesaian untuk susun atur desktop dikunci

Cara membuat sambungan desktop jauh memaparkan bar tugas pihak lain
