PHP တွင် XML_Parse () သည် Expat စာကြည့်တိုက်ကိုအသုံးပြုသောဖြစ်ရပ် - မောင်းနှင် XML parser function တစ်ခုဖြစ်သည်။ ဤခွဲခြမ်းစိတ်ဖြာသည် SAX (XML အတွက်ရိုးရှင်းသော API အတွက်ရိုးရှင်းသော API) parser နှင့်ဆင်တူသည်။
သို့သော် XML_Parse () သည် DTD တွင်အသေးစိတ်ဖွဲ့စည်းပုံကိုအလိုအလျောက်မခွဲပါ (DOMC အမျိုးအစားနှင့်အဓိပ္ပါယ်ဖွင့်ဆိုချက်) ကိုအလိုအလျောက်မခွဲပါ။ သို့သော်၎င်းသည်သင့်လျော်သော callback လုပ်ဆောင်ချက်များကိုသတ်မှတ်ခြင်းဖြင့် DTD ကိုဖော်ထုတ်ရန်နှင့် DTD ကိုဖော်ထုတ်ရန်တောင်းဆိုသည့်အခါပြန်လည်ခေါ်ဆိုမှုကိုဖြစ်ပေါ်စေသည်။
DTD ကြေငြာချက်သည် XML document တွင်ခွင့်ပြုထားသောဖွဲ့စည်းပုံနှင့် element အမျိုးအစားများကိုသတ်မှတ်သည်။ လုံခြုံရေးနှင့်ဒေတာစိစစ်အတည်ပြုမှုတို့တွင်အလွန်အရေးကြီးသည်။ အချို့သောအခြေအနေများတွင် XML ကိုခွဲခြမ်းစိတ်ဖြာခြင်း (သို့) DTD နှင့်အတူ XML နှင့်အတူ XML ကိုငြင်းပယ်သောအခါ၎င်းတွင်ပါရှိသော DTD ကိုခွဲခြားသတ်မှတ်လိုပေမည်။
ဤတွင် XML_Parser_Create () နှင့် xml_parse () နှင့် DTD ကိုဖမ်းယူခြင်း၏ဥပမာတစ်ခုဖြစ်သည်။
<?php
$xmlString = <<<XML
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://m66.net/dtd/note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;
// ဖန်တီး XML မိစ်ဆာ
$parser = xml_parser_create();
// ညွှန်ကြားချက်များအတွက်ခေါ်ဆိုမှု function ကိုသတ်မှတ်ပါ(အပြောင်းအလဲနဲ့အဘို့ DTD ကြေငြာချက်စသည်)
function handle_processing_instruction($parser, $target, $data) {
echo "processing command ကိုပစ်မှတ်: $target\n";
echo "လုပ်ငန်းစဉ်ညွှန်ကြားချက်ဒေတာ: $data\n";
}
// default processing function ကိုသတ်မှတ်ပါ
function handle_default($parser, $data) {
if (preg_match('/^<!DOCTYPE/i', trim($data))) {
echo "ရှာဖွေတွေ့ရှိ DTD အသေအချာပေြာဆိုချက်: $data\n";
}
}
// CallBack function ကိုခညျြနှောငျ
xml_set_processing_instruction_handler($parser, "handle_processing_instruction");
xml_set_default_handler($parser, "handle_default");
// ခွဲခြမ်းစိတ်ဖြာစတင်ပါ
if (!xml_parse($parser, $xmlString, true)) {
die(sprintf(
"XML အမှား: %s အတွက် %d အိုကေ",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)
));
}
// အရင်းအမြစ်များကိုအခမဲ့
xml_parser_free($parser);
?>
Mandl_Processing_instruction_instruction_instruction ကို <? xml ... နှင့်အခြားအပြောင်းအလဲနဲ့ညွှန်ကြားချက်များနှင့်အခြားအပြောင်းအလဲနဲ့ညွှန်ကြားချက်များ
Handled_Default သည်အခြားပရိုဆက်ဆာများကကြားဖြတ်မကြားဖူးသောကုန်ကြမ်းအချက်အလက်အများစုကိုသိမ်းယူရန်အသုံးပြုနိုင်သည့်ပိုမိုသောအခြေခံပရိုဆက်ဆာဖြစ်သည်။ <! DOCTTYPE> ကြေငြာချက်ရှိမရှိစစ်ဆေးရန်၎င်းကိုကျွန်ုပ်တို့အသုံးပြုသည်။
Preg_match (/ ^ <!) string သည် DTD ကြေငြာချက်ဟုတ်မဟုတ်ဆုံးဖြတ်ရန် (/ ^ <! DOCTYPE / i ', $ ဒေတာ) ကို သုံးပါ။
XML parsers များကိုအသုံးပြုသောအခါ XXE (XML ပြင်ပ Entity Intimity Intement) တိုက်ခိုက်မှုများကိုကာကွယ်ရန်သတိထားပါ။ XML_Parse () ကိုယ်နှိုက်သည် Entity Entity (Expat သည်လုံခြုံစိတ်ချရမှု) ကိုမထောက်ပံ့ပါ။
libxml_disable_entity_loader(true);
PHP 8.0+ တွင် libxml_disable_entity_entity_Omentity_Eloper_loader () ကိုကန့်ကွက်သည်။ သို့သော်ပုံမှန်အပြုအမူသည်ပိတ်ထားပြီးဖြစ်သည်။
XML_Parse () သူ့ဟာသူသည် DTD ၏ဖွဲ့စည်းတည်ဆောက်ပုံအကြောင်းအရာကိုဆန်းစစ်မထားပေ။
မထင်မှတ်သောရင်းမြစ်များမှ XML နှင့်ဆက်ဆံရာတွင်လုံခြုံရေးအားနည်းချက်များကိုကာကွယ်ရန် DTD နှင့် EVE Extensions ကိုသတိထားပါ။
ဝေးလံခေါင်သီသော DTD ကိုးကားထားသော URL များအားလုံးကိုစစ်ဆေးရန်အတွက် ( M66.net ကဲ့သို့သော) စိတ်ကြိုက်ဒိုမိန်းအမည်များဖြင့်အစားထိုးနိုင်သည်။
အထက်ဖော်ပြပါနည်းလမ်းဖြင့်သင်သည် XML_Parse () ကို သုံး. XML တွင် DTD ကြေငြာချက်များကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိစေရန်နှင့်လုပ်ငန်းစဉ်ကိုရှာဖွေရန်နှင့်လုပ်ငန်းစဉ်ကိုသုံးနိုင်သည်။