လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Parsxml_load_string သည်တရားမ 0 င်စာလုံးများနှင့်တွေ့ဆုံသည့်အခါခွဲခြမ်းစိတ်ဖြာခြင်း၏ပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်နည်း။

Parsxml_load_string သည်တရားမ 0 င်စာလုံးများနှင့်တွေ့ဆုံသည့်အခါခွဲခြမ်းစိတ်ဖြာခြင်း၏ပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်နည်း။

gitbox 2025-06-11

XML ကြိုးများကို PHP ၏ ရိုးရှင်းသော function ကို အသုံးပြု. ခွဲခြမ်းစိတ်ဖြာသည့်အခါ, ဤအမှားအမျိုးအစားသည်ပုံမှန်အားဖြင့် XML ကြိုးများရှိအက္ခရာများရှိနေခြင်း မှစ. ထိန်းချုပ်မှုဇာတ်ကောင်များ, ဤဆောင်းပါးသည်ပြ the နာကိုပိုမိုဖြစ်ပေါ်စေပြီးဖြေရှင်းနည်းများနှင့်နမူနာကုဒ်များပေးသည့်အသေးစိတ်ရှင်းလင်းချက်ကိုပေးလိမ့်မည်။


1 ။ ပြ problem နာခွဲခြမ်းစိတ်ဖြာ

SimplexMl_load_string သည် PHP မှအသုံးပြုသောရိုးရှင်းသောလုပ်ဆောင်မှုဖြစ်သည်။ XML string သည်တရားမဝင်ဇာတ်ကောင်များပါ 0 င်သည့်အခါ function သည် မှားယွင်းသောကြောင့်မှားယွင်းသောအရာ နှင့်အမှားတစ်ခုဖြစ်ပေါ်လာသည်။ ယေဘုယျအားဖြင့်တရားမဝင်ဇာတ်ကောင်များမှာ -

  • Ascii ထိန်းချုပ်မှုဇာတ်ကောင်များ (ဥပမာ - နေရာများ, လိုင်းချိုးဖောက်မှုများ,

  • မှန်ကန်စွာမလွတ်မြောက်သောဇာတ်ကောင်များ (ဥပမာ နှင့် amp , မရေးပါနှင့်)

  • XML ကြေငြာချက်သို့မဟုတ်အကြောင်းအရာ encoding သည်အမှန်တကယ် encoding နှင့်မကိုက်ညီပါ

  • Non-Utf-8 encoding ဒါပေမယ့်မကြေငြာ

ဤဇာတ်ကောင်များသည် XML parser ကို string string ကိုမှန်ကန်စွာနားမလည်နိုင်သည့် string string ကိုနားမလည်နိုင်ပါ။


2 ။ ဘုံဖြေရှင်းချက်

1 ။ တရားမဝင်ထိန်းချုပ်မှုဇာတ်ကောင်များကိုရှင်းလင်းပါ

ထိန်းချုပ်မှုအက္ခရာများကိုပုံမှန်အသုံးအနှုန်းတွေမှတစ်ဆင့်ဖယ်ရှားနိုင်သည်။

 <?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);
}
?>

2 ။ အထူးအက္ခရာများမှလွတ်မြောက်ပါ

အကယ်. XML ပါဝင်မှုတွင် & , < , > စသည်များမဖော်ပြထားသောသင်္ကေတများပါ 0 င်ပါကသင်ပထမ ဦး ဆုံးမှလွတ်မြောက်ရန်လိုအပ်သည်။

 <?php
$xmlString = 'ဤသည် unacawed ပါရှိသည်&၏သင်္ကေတXMLကြိုး';

$xmlString = str_replace('&', '&amp;', $xmlString);

$xml = simplexml_load_string($xmlString);
if ($xml === false) {
    echo "ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ\n";
} else {
    print_r($xml);
}
?>

မှတ်စု: အကယ်. ၎င်းသည်တရားဝင် XML ပြီးသားဖြစ်ပါက၎င်းသည်အမှားအယွင်းများကိုအစားထိုးခြင်းနှင့်သတ်သတ်မှတ်မှတ်အခြေအနေများအတွက်ကိုင်တွယ်သင့်သည်။

3 ။ ကုဒ်မှန်ကန်ကြောင်းသေချာပါစေ

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);
}
?>

4 ။ အမှားများကိုဖမ်းရန် libxml_use_internal_errors ကို သုံးပါ

ပိုမိုကောင်းမွန်သော 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);
}
?>

3 ။ ပြည့်စုံသောဥပမာများ

တရားမ 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);
}
?>

4 ။ အကျဉ်းချုပ်

  • SimplexMl_load_string ခွဲခြမ်းစိတ်ဖြာမှုမအောင်မြင်ပါကပထမခြေလှမ်းမှာတရားမ 0 င်ထိန်းချုပ်မှုအက္ခရာများရှိ, မရှိစစ်ဆေးရန်ဖြစ်သည်။

  • XML string တွင်ရှိသောအထူးအက္ခရာများကိုမှန်ကန်စွာထွက်ပြေးတိမ်းရှောင်ခဲ့ကြောင်းအတည်ပြုပါ။

  • XML string ကို UTF-8 အဖြစ် encoded လုပ်ပြီးလိုအပ်လျှင်ပြောင်းလဲရန်လိုအပ်သည်။

  • အသေးစိတ်အမှားအချက်အလက်များကိုရှာဖွေရန် LibxMl_use_internal_Erues (Trust) ကို သုံးပါ။

ဤကျွမ်းကျင်မှုများကိုကျွမ်းကျင်ခြင်းသည်တရားမ 0 င်အက္ခရာများကြောင့်ဖြစ်ပေါ်လာသောပျက်ကွက်မှုများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။