XML ကြိုးများကို PHP ၏ ရိုးရှင်းသော function ကို အသုံးပြု. ခွဲခြမ်းစိတ်ဖြာသည့်အခါ, ဤအမှားအမျိုးအစားသည်ပုံမှန်အားဖြင့် XML ကြိုးများရှိအက္ခရာများရှိနေခြင်း မှစ. ထိန်းချုပ်မှုဇာတ်ကောင်များ, ဤဆောင်းပါးသည်ပြ the နာကိုပိုမိုဖြစ်ပေါ်စေပြီးဖြေရှင်းနည်းများနှင့်နမူနာကုဒ်များပေးသည့်အသေးစိတ်ရှင်းလင်းချက်ကိုပေးလိမ့်မည်။
SimplexMl_load_string သည် PHP မှအသုံးပြုသောရိုးရှင်းသောလုပ်ဆောင်မှုဖြစ်သည်။ XML string သည်တရားမဝင်ဇာတ်ကောင်များပါ 0 င်သည့်အခါ function သည် မှားယွင်းသောကြောင့်မှားယွင်းသောအရာ နှင့်အမှားတစ်ခုဖြစ်ပေါ်လာသည်။ ယေဘုယျအားဖြင့်တရားမဝင်ဇာတ်ကောင်များမှာ -
Ascii ထိန်းချုပ်မှုဇာတ်ကောင်များ (ဥပမာ - နေရာများ, လိုင်းချိုးဖောက်မှုများ,
မှန်ကန်စွာမလွတ်မြောက်သောဇာတ်ကောင်များ (ဥပမာ နှင့် amp , မရေးပါနှင့်)
XML ကြေငြာချက်သို့မဟုတ်အကြောင်းအရာ encoding သည်အမှန်တကယ် encoding နှင့်မကိုက်ညီပါ
Non-Utf-8 encoding ဒါပေမယ့်မကြေငြာ
ဤဇာတ်ကောင်များသည် XML parser ကို string string ကိုမှန်ကန်စွာနားမလည်နိုင်သည့် string string ကိုနားမလည်နိုင်ပါ။
ထိန်းချုပ်မှုအက္ခရာများကိုပုံမှန်အသုံးအနှုန်းတွေမှတစ်ဆင့်ဖယ်ရှားနိုင်သည်။
<?php
$xmlString = 'ဤသည်တရားမဝင်ဇာတ်ကောင်ပါရှိသည်XMLကြိုး';
// Control Control ကိုဖျက်ပါ,လိုင်းချိုးကိုစောင့်ရှောက်လော့(\n)、ဝင်ရောက်(\r)、tab သင်္ကေတများ(\t)
$cleanXmlString = preg_replace('/[^\PC\s]/u', '', $xmlString);
$xml = simplexml_load_string($cleanXmlString);
if ($xml === false) {
echo "ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ\n";
} else {
print_r($xml);
}
?>
အကယ်. XML ပါဝင်မှုတွင် & , < , > စသည်များမဖော်ပြထားသောသင်္ကေတများပါ 0 င်ပါကသင်ပထမ ဦး ဆုံးမှလွတ်မြောက်ရန်လိုအပ်သည်။
<?php
$xmlString = 'ဤသည် unacawed ပါရှိသည်&၏သင်္ကေတXMLကြိုး';
$xmlString = str_replace('&', '&', $xmlString);
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
echo "ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ\n";
} else {
print_r($xml);
}
?>
မှတ်စု: အကယ်. ၎င်းသည်တရားဝင် XML ပြီးသားဖြစ်ပါက၎င်းသည်အမှားအယွင်းများကိုအစားထိုးခြင်းနှင့်သတ်သတ်မှတ်မှတ်အခြေအနေများအတွက်ကိုင်တွယ်သင့်သည်။
SimplexMl_load_string သည် UTF-8 encoded ကြိုးများကိုပုံမှန်အားဖြင့်ကိုင်တွယ်သည်။ အကယ်. XML သည်အခြား encoding တစ်ခု (GBK, ISO-8859-1) ဆိုပါက encoding ကိုပထမ ဦး စွာပြောင်းလဲရန်လိုအပ်သည်။
<?php
$xmlString = file_get_contents('http://gitbox.net/path/to/xmlfile.xml');
$xmlString = mb_convert_encoding($xmlString, 'UTF-8', 'GBK');
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
echo "ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ\n";
} else {
print_r($xml);
}
?>
ပိုမိုကောင်းမွန်သော debugging အတွက်အတွင်းပိုင်းအမှားရိုက်ကူးမှုအတွက် enable လုပ်နိုင်သည်။
<?php
libxml_use_internal_errors(true);
$xmlString = '<invalid&xml>';
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
foreach (libxml_get_errors() as $error) {
echo "အမှား:", $error->message;
}
libxml_clear_errors();
} else {
print_r($xml);
}
?>
တရားမ 0 င်သောအက္ခရာများကိုသန့်ရှင်းရေးပြုလုပ်ခြင်း,
<?php
libxml_use_internal_errors(true);
$xmlString = file_get_contents('http://gitbox.net/sample.xml');
// တရားမဝင်ဇာတ်ကောင်များကိုရှင်းလင်းပါ(လိုင်းချိုးကိုစောင့်ရှောက်လော့、ဝင်ရောက်、tab သင်္ကေတများ)
$xmlString = preg_replace('/[^\PC\s]/u', '', $xmlString);
// Code သို့ပြောင်းပါ UTF-8(မူရင်း encoding ဟုယူဆ GBK)
$xmlString = mb_convert_encoding($xmlString, 'UTF-8', 'GBK');
$xml = simplexml_load_string($xmlString);
if ($xml === false) {
echo "ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ,အမှား信息如下:\n";
foreach (libxml_get_errors() as $error) {
echo trim($error->message), "\n";
}
libxml_clear_errors();
} else {
echo "အောင်မြင်သောခွဲခြမ်းစိတ်ဖြာ:\n";
print_r($xml);
}
?>
SimplexMl_load_string ခွဲခြမ်းစိတ်ဖြာမှုမအောင်မြင်ပါကပထမခြေလှမ်းမှာတရားမ 0 င်ထိန်းချုပ်မှုအက္ခရာများရှိ, မရှိစစ်ဆေးရန်ဖြစ်သည်။
XML string တွင်ရှိသောအထူးအက္ခရာများကိုမှန်ကန်စွာထွက်ပြေးတိမ်းရှောင်ခဲ့ကြောင်းအတည်ပြုပါ။
XML string ကို UTF-8 အဖြစ် encoded လုပ်ပြီးလိုအပ်လျှင်ပြောင်းလဲရန်လိုအပ်သည်။
အသေးစိတ်အမှားအချက်အလက်များကိုရှာဖွေရန် LibxMl_use_internal_Erues (Trust) ကို သုံးပါ။
ဤကျွမ်းကျင်မှုများကိုကျွမ်းကျင်ခြင်းသည်တရားမ 0 င်အက္ခရာများကြောင့်ဖြစ်ပေါ်လာသောပျက်ကွက်မှုများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။