PHP Development တွင် PHP Development တွင် Pack () function ကို binary strings များထဲသို့ထည့်ရန်မကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော် developer များစွာသည်မကြာခဏရှုပ်ထွေးနေသော pack () function ကို အသုံးပြု. ဒေတာများကိုအသုံးပြုပြီးအရှားနိုကဖြစ်သော "garbled" ပြ problems နာများနှင့်ကြုံတွေ့ရသည်။ ဤဆောင်းပါးသည်ဤဖြစ်စဉ်နှင့်ပတ် 0 န်းကျင်တွင် carbled code ၏အကြောင်းရင်းများ၏အကြောင်းရင်းများကိုခွဲခြမ်းစိတ်ဖြာပြီးအထူးသဖြင့်အက်ခရာ encoding ၏ရှုထောင့်မှရှုထောင့် မှစ. အသေးစိတ်ဆွေးနွေးမှုများပြုလုပ်လိမ့်မည်။
အဆိုပါ pack () function ကိုသတ်မှတ်ထားသော format နဲ့အညီဒေတာကို binary string ကိုအဖြစ် packages ။ ၎င်း၏ပုံမှန်အသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -
<?php
// binary format နဲ့ကိန်းနှစ်ခုကိုအထုပ်
$data = pack("CC", 65, 66);
echo $data; // ထုတ်လုပ်ခြင်း AB
?>
ဤတွင် Pack (CC ", 65, 66) သည် ASCII ဇာတ်ကောင် များ နှင့် Binary string နှင့်သက်ဆိုင်သည် ။
Pack ()) outputs ကုန်ကြမ်း binary data ကိုသေချာပေါက်မသေချာပေါက်စာသား encoding မဟုတ်ပါဘူး။ အကယ်. သင်သည် Echo သို့မဟုတ် output ကိုတိုက်ရိုက်သုံးပါ က terminal or browser သည် carble code ကိုဖြစ်ပေါ်စေသည့်လက်ရှိ default encoding နှင့်အညီဤ browser ကိုအနက်ဖွင့်လိမ့်မည်။
<?php
// အချို့သော binary ဒေတာထုပ်ပိုး
$data = pack("H*", "e4bda0e5a5bd");
echo $data; // ဒီဟာကိုဖြစ်သင့်တယ်“မင်္ဂလာပါ”၏UTF-8ကုဒ်,但直接ထုတ်လုပ်ခြင်းဒီတစ်ခါလည်း garbled
?>
ဤတွင် E4Bda0e5A5BD သည် Hello UTF-8 Hexadecimal encoding ဖြစ်သည်။ အကယ်. ပတ်ဝန်းကျင်ကို UTF-8 သို့မဟုတ် encoding ကိုမှန်ကန်စွာမသတ်မှတ်ထားပါက output သည် barbled code ကိုပြလိမ့်မည်။
ကွဲပြားခြားနားသောစနစ်များသို့မဟုတ် applications များသည် encoding ကွဲပြားခြားနားသော default ပုံမှန်အားဖြင့်အပြောင်းအလဲနဲ့ရှိသည်။ Pack () မူရင်း bytes ကိုထုတ်ပေးသည်နှင့်အလိုအလျောက် contaction လိမ့်မည်မဟုတ်ပေ။ အကယ်. သင်သည်၎င်း၏အကြောင်းအရာကို encoded string အချို့အဖြစ်ဆက်ဆံပါကအမှန်တကယ်ဒေတာ encoding နှင့်မကိုက်ညီပါက carbled code မလွှဲမရှောင်သာဖြစ်လိမ့်မည်။
output content သည် receiver ၏ encoding နှင့် parsing ပေါ်တွင်မူတည်သည်။ ဥပမာအားဖြင့် browser သည် UTF-8 ကိုပုံမှန်အားဖြင့်မဟုတ်ဘဲ terminal font သည်သက်ဆိုင်ရာ encoded စာလုံးများကိုမထောက်ပံ့ပါ။
သင်၏ PHP ဖိုင်ကို UTF-8 encoding နှင့်သင်၏ဝဘ်စာမျက်နှာသို့မဟုတ် terminal ပတ် 0 န်းကျင်သည် UTF-8 ကိုအသုံးပြုကြောင်းသေချာပါစေ။ ၎င်းကိုဝက်ဘ်စာမျက်နှာထဲထည့်နိုင်သည်။
<?php
header("Content-Type: text/html; charset=utf-8");
?>
လူတွေကိုစာသားတွေကို output လုပ်ဖို့လိုအပ်မယ်ဆိုရင် binary data တွေကို free data တွေကို free free encoded string ကိုအဖြစ်ပြောင်းပါ။
<?php
// ဝန်ထုပ်“မင်္ဂလာပါ”၏ UTF-8 hexadecimal ဒေတာ
$data = pack("H*", "e4bda0e5a5bd");
// ထုတ်လုပ်ခြင်း之前用 mb_convert_encoding 转换ကုဒ်
echo mb_convert_encoding($data, "UTF-8", "UTF-8");
?>
သို့မဟုတ် Bin2HEX () ကို သုံးရန် Bin2HEX () ကို အသုံးပြု. Binary Data ကို Concled Code ကိုတိုက်ရိုက်ရှောင်ရှားရန်။
<?php
echo bin2hex($data); // ထုတ်လုပ်ခြင်းe4bda0e5a5bd,အဆင်ပြေ debugging
?>
binary data ကိုမပို့ခင် encoding ကိုမိတ္တူကူးပါ။ ယေဘုယျအားဖြင့်ပြောရလျှင် Binary Data သည် binary data ဖြစ်ပြီး application သို့မဟုတ် protocol layer ကိုမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။ မျက်နှာပြင်အတွက်အသုံးပြုသောအခါသာ၎င်းသည်သက်ဆိုင်ရာ encoded string ကိုပြောင်းလဲရန်လိုအပ်သည်။
<?php
// ဖြင့် UTF-8 ကုဒ်ဝန်ထုပ်字符串 “မင်္ဂလာပါ”
$utf8_string = "မင်္ဂလာပါ";
$packed = pack("a*", $utf8_string);
// 直接ထုတ်လုပ်ခြင်း(ဒီတစ်ခါလည်း garbled)
echo $packed;
// 设置正确ကုဒ်,concled code ကိုရှောင်ကြဉ်ပါ
header("Content-Type: text/html; charset=utf-8");
// ထုတ်လုပ်ခြင်း转换后၏字符串
echo mb_convert_encoding($packed, "UTF-8", "UTF-8");
?>
အထုပ်၏အနှစ်သာရ () function သည် binary data များကိုထုတ်လုပ်ရန်နှင့်အမှိုက်များပြ problem နာသည်အများအားဖြင့်အများအားဖြင့်ရှေ့နောက်မညီဇာတ်ကောင် encoding encoding နားလည်မှုမှဖြစ်သည်။ အဓိကအချက်များမှာ -
Output () output သည်သာမန်စာသားမဟုတ်ဘဲကုန်ကြမ်း bytes ဖြစ်သည်ကိုနားလည်ပါ။
ထုတ်လုပ်မှုသို့မဟုတ်လုပ်ငန်းများ၌အခါဒေတာတသမတ်တည်း encoded ကြောင်းသေချာပါစေ။
binary data ကိုမှန်ကန်စွာ encoded မဟုတ်လျှင်စာသားအဖြစ်တိုက်ရိုက်ထုတ်လွှင့်ခြင်းကိုရှောင်ပါ။
ဤ coding မူများကိုကျွမ်းကျင်ပြီးသောအခါ, အထုပ် () ကိုအသုံးပြုပြီး barbled code ပြ problems နာများကိုအလွယ်တကူကြုံတွေ့ရမည်မဟုတ်ပါ။
ဒိုမိန်းအမည်ဥပမာ -
<?php
// နမူနာ URL ဒိုမိန်းအမည်ကိုအစားထိုးပါ m66.net
$url = "https://m66.net/api/data";
echo $url;
?>