Parse_URL function ၏ syntax သည်အလွန်ရိုးရှင်းပါသည်။
$url = "https://gitbox.net/path/to/page?name=Zhang San&age=25";
$parts = parse_url($url);
print_r($parts);
ရလဒ်ရလဒ် -
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/page
[query] => name=Zhang San&age=25
)
အထက်ပါဥပမာမှတွေ့မြင်နိုင်သည့်အတိုင်း Parse_URL သည် protocol, host, path and query string string ကိုအောင်မြင်စွာဆန်းစစ်နိုင်ခဲ့သည်။
အထူးအက္ခရာများတွင်တရုတ်, နေရာများ, # နိမိတ်လက္ခဏာများ, ရာခိုင်နှုန်း, ရာခိုင်နှုန်း) စသည်တို့ပါဝင်သည်။ ဤဇာတ်ကောင်များသည် URL တွင်ကွဲပြားသောအဓိပ္ပါယ်များရှိသည်။ URL ကိုတိုက်ရိုက်နေရာချသောအခါ Parse_URL သည် အမှားအယွင်းများကိုခွဲခြမ်းစိတ်ဖြာနိုင်သည်။
URL တွင်တရုတ်သို့မဟုတ်အခြား apcii မဟုတ်သောဇာတ်ကောင်များပါ 0 င်ပါ က URL သည်ပထမ ဦး စွာ encoded သင့်သည်,
ဥပမာ -
$url = "https://gitbox.net/search?query=မိုးလေဝသခန့်မှန်းချက်";
$parts = parse_url($url);
echo $parts['query']; // ဒါဟာ garbled code သို့မဟုတ် parse အမှားများ output ကို output ကိုဖြစ်နိုင်သည်
မှန်ကန်သောနည်းလမ်းမှာ parameters တွေကိုပထမ ဦး စွာမေးမြန်းရန် Urlencode encoding ကိုအသုံးပြုရန်ဖြစ်သည်။
$query = urlencode("မိုးလေဝသခန့်မှန်းချက်");
$url = "https://gitbox.net/search?query=$query";
$parts = parse_url($url);
echo $parts['query']; // query=%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5
နေရာများကို % 20 သို့မဟုတ် + အဖြစ် URL တွင် encoded ရမည်။ အကယ်. သင့်တွင် URL တွင်တိုက်ရိုက်နေရာများပါ 0 င်ပါက Parse_URL သည် အာကာသအပြီးအကြောင်းအရာများကိုဖြတ်သန်းသွားနိုင်သည်။
ဥပမာ -
$url = "https://gitbox.net/search?keyword=hello world";
$parts = parse_url($url);
print_r($parts);
ယခုအချိန်တွင် Parse_Url သည် URL သည် သော့ချက်စာလုံးကို သာရောက်သည်ဟုထင်လိမ့်မည် ။ ပြောင်းလဲသင့်သည် -
$url = "https://gitbox.net/search?keyword=hello%20world";
$parts = parse_url($url);
print_r($parts);
# URL တွင်သီးခြားစီ ခွဲခြမ်းစိတ်ဖြာ မည့် URL တွင်အပိုင်းအစများ (အပိုင်းအစ) ကိုကိုယ်စားပြုရန်အသုံးပြုသည်။ # URL တွင်တိုက်ရိုက် encoded မထားပါကနောက်ဆက်တွဲအကြောင်းအရာများကိုခွဲခြမ်းစိတ်ဖြာခြင်းရလဒ်ကိုအကျိုးသက်ရောက်နိုင်သည့်အပိုင်းအစများကိုအပိုင်းအစများထည့်သွင်းစဉ်းစားလိမ့်မည်။
ဥပမာ -
$url = "https://gitbox.net/page?name=abc#section2";
$parts = parse_url($url);
print_r($parts);
ထုတ်လုပ်မှု -
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /page
[query] => name=abc
[fragment] => section2
)
အကယ်. # သည် parameter တန်ဖိုး၏အစိတ်အပိုင်းတစ်ခုဖြစ်ပါက % 23 အဖြစ် encoded ရမည်။
အကယ်. URL တွင်ရာခိုင်နှုန်းထည့်ထားပြီးပါက Parse_URL ကို အလိုအလျောက်ဖယ်ရှားပစ်မည်မဟုတ်ပါ။ အထူးသဖြင့် encoding မပြည့်စုံပါကဥပမာအားဖြင့် % 2 သည် နောက်ဆုံးနည်းနည်းမျှမရှိလျှင် Parse_URL သည် အမှားတစ်ခုသတင်းပို့လိမ့်မည်။
အဖြေမှာရာခိုင်နှုန်းသောကုဒ်များအားလုံးသည်ပြည့်စုံပြီးတရားဝင်ဖြစ်ကြောင်းသို့မဟုတ် URL ကိုအရင်စစ်ဆေးရန်သေချာစေရန်ဖြစ်သည်။
မေးခွန်း 1 - Parse_Url သည်မှားယွင်းသောသို့မဟုတ်မပြည့်စုံသောရလဒ်များရရှိခဲ့သည် ဖြစ်နိုင်ချေရှိသောအကြောင်းပြချက်မှာ URL အမျိုးအစားသည်တရားမ 0 င်သို့မဟုတ်တရားမဝင်သောဇာတ်ကောင်များပါ 0 င်သည်။ Filter_Var ($ URL, filter_valka_URL) ကို အရင်စစ်ဆေးရန်အတွက်အသုံးပြုရန်အကြံပြုသည်။
မေးခွန်း 2 - မကိုမာသော encoding encoding encoding စုံစမ်းမှု parameter parsing အတွက်ရှုပ်ထွေးမှုများ အထူးအက္ခရာများအားလုံးသည်မှန်ကန်စွာ encoded, အထူးသဖြင့် strings and parts အစိတ်အပိုင်းများကိုသေချာစွာစစ်ဆေးပါ။
မေးခွန်း 3. ခွဲခြမ်းစိတ်ဖြာရလဒ်ပါစုံစမ်းမှုအပိုင်းသည်အဓိကတန်ဖိုးအတွဲများထဲသို့မခွဲပါ
Parse_url သည် URL ဖွဲ့စည်းပုံကိုခွဲထုတ်ရန်အတွက်သာတာဝန်ရှိသည်။ ၎င်းကို parse_str လုပ်ဆောင်မှုနှင့်ပေါင်းစပ်နိုင်သည်။
parse_str($parts['query'], $queryParams);
print_r($queryParams);
Parse_Url ကို အသုံးမပြုခင် URL string သည်တရားဝင်ဖြစ်ပြီးအထူးအက္ခရာများမှန်ကန်စွာ encoded ဖြစ်သည်။
တရုတ်နှင့် ASCII ဇာတ်ကောင်များသည် urlencode ဖြစ်ရမည်။
နေရာများကဲ့သို့သောအထူးသင်္ကေတများ, # %, % အထူးဂရုပြုရန်အထူးဂရုပြုရန်လိုအပ်သည်။
စုံစမ်းမှုဆိုင်ရာသတ်မှတ်ချက်များအတွက် Parse_Strtrart ကို ထပ်မံခွဲခြမ်းစိတ်ဖြာရန်အသုံးပြုနိုင်သည်။
ခွဲခြမ်းစိတ်ဖြာခြင်းကိုကြုံတွေ့ရသောအခါ URL format ကိုအရင်စစ်ဆေးပြီး encoding ပြ problem နာကို debug လုပ်ပါ။
အထက်ပါကြိုတင်ကာကွယ်မှုများပြုလုပ်ရာတွင်ရှုပ်ထွေးသောသို့မဟုတ်အထူးအက္ခရာများကိုကိုင်တွယ်ရန် Parse_URL ကို ပိုမိုသက်သာစေနိုင်သည်။
$url = "https://gitbox.net/search?query=" . urlencode("မိုးလေဝသခန့်မှန်းချက်#1");
$parts = parse_url($url);
print_r($parts);
if (isset($parts['query'])) {
parse_str($parts['query'], $queryParams);
print_r($queryParams);
}
ဤကုဒ်သည်တရုတ်နှင့် # ဇာတ်ကောင်များနှင့် # ဇာတ်ကောင်များနှင့်စုံစမ်းမှုဆိုင်ရာသတ်မှတ်ချက်များ၏ခွဲခြမ်းစိတ်ဖြာမှုကိုပြသသည်။