လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Pack () output garbled ကုဒ်? ဒါဟာဇာတ်ကောင် encoding ပြ problem နာဖြစ်နိုင်သည်

Pack () output garbled ကုဒ်? ဒါဟာဇာတ်ကောင် encoding ပြ problem နာဖြစ်နိုင်သည်

M66 2025-05-31

PHP Development တွင် PHP Development တွင် Pack () function ကို binary strings များထဲသို့ထည့်ရန်မကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော် developer များစွာသည်မကြာခဏရှုပ်ထွေးနေသော pack () function ကို အသုံးပြု. ဒေတာများကိုအသုံးပြုပြီးအရှားနိုကဖြစ်သော "garbled" ပြ problems နာများနှင့်ကြုံတွေ့ရသည်။ ဤဆောင်းပါးသည်ဤဖြစ်စဉ်နှင့်ပတ် 0 န်းကျင်တွင် carbled code ၏အကြောင်းရင်းများ၏အကြောင်းရင်းများကိုခွဲခြမ်းစိတ်ဖြာပြီးအထူးသဖြင့်အက်ခရာ encoding ၏ရှုထောင့်မှရှုထောင့် မှစ. အသေးစိတ်ဆွေးနွေးမှုများပြုလုပ်လိမ့်မည်။


1 ။ နိဒါန်း Pack () function ကို

အဆိုပါ pack () function ကိုသတ်မှတ်ထားသော format နဲ့အညီဒေတာကို binary string ကိုအဖြစ် packages ။ ၎င်း၏ပုံမှန်အသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -

 <?php
// binary format နဲ့ကိန်းနှစ်ခုကိုအထုပ်
$data = pack("CC", 65, 66);
echo $data; // ထုတ်လုပ်ခြင်း AB
?>

ဤတွင် Pack (CC ", 65, 66) သည် ASCII ဇာတ်ကောင် များ နှင့် Binary string နှင့်သက်ဆိုင်သည်

2 ။ အဘယ်ကြောင့်အမှိုက်သရိုက်ကုဒ်ပေါ်လာသနည်း

1 ။ Binary Data သည် 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 ကိုပြလိမ့်မည်။

2 ။ ဇာတ်ကောင် encoding mismatch

ကွဲပြားခြားနားသောစနစ်များသို့မဟုတ် applications များသည် encoding ကွဲပြားခြားနားသော default ပုံမှန်အားဖြင့်အပြောင်းအလဲနဲ့ရှိသည်။ Pack () မူရင်း bytes ကိုထုတ်ပေးသည်နှင့်အလိုအလျောက် contaction လိမ့်မည်မဟုတ်ပေ။ အကယ်. သင်သည်၎င်း၏အကြောင်းအရာကို encoded string အချို့အဖြစ်ဆက်ဆံပါကအမှန်တကယ်ဒေတာ encoding နှင့်မကိုက်ညီပါက carbled code မလွှဲမရှောင်သာဖြစ်လိမ့်မည်။

3 ။ terminal ကိုသို့မဟုတ် browser encoding settings တွေကို

output content သည် receiver ၏ encoding နှင့် parsing ပေါ်တွင်မူတည်သည်။ ဥပမာအားဖြင့် browser သည် UTF-8 ကိုပုံမှန်အားဖြင့်မဟုတ်ဘဲ terminal font သည်သက်ဆိုင်ရာ encoded စာလုံးများကိုမထောက်ပံ့ပါ။

3 ။

1 ။ ရှင်းရှင်းလင်းလင်း encode နှင့်ပတ် 0 န်းကျင်အထောက်အပံ့များကိုသေချာပါစေ

သင်၏ PHP ဖိုင်ကို UTF-8 encoding နှင့်သင်၏ဝဘ်စာမျက်နှာသို့မဟုတ် terminal ပတ် 0 န်းကျင်သည် UTF-8 ကိုအသုံးပြုကြောင်းသေချာပါစေ။ ၎င်းကိုဝက်ဘ်စာမျက်နှာထဲထည့်နိုင်သည်။

 <?php
header("Content-Type: text/html; charset=utf-8");
?>

2 ။ ကျိုးကြောင်းဆီလျော်ဒေတာကိုမှကျိုးကြောင်းဆီလျော်ပြောင်းလဲမှုများလုပ်ပါ

လူတွေကိုစာသားတွေကို 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
?>

3 ။ ကွန်ယက် protocols များနှင့်စာဖတ်ခြင်းနှင့်ရေးသားခြင်းအတွက်ပြုပြင်ခြင်း

binary data ကိုမပို့ခင် encoding ကိုမိတ္တူကူးပါ။ ယေဘုယျအားဖြင့်ပြောရလျှင် Binary Data သည် binary data ဖြစ်ပြီး application သို့မဟုတ် protocol layer ကိုမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။ မျက်နှာပြင်အတွက်အသုံးပြုသောအခါသာ၎င်းသည်သက်ဆိုင်ရာ encoded string ကိုပြောင်းလဲရန်လိုအပ်သည်။


Code Page

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