လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MB_StrCut ရှိ Byte နှင့်ဇာတ်ကောင်ပြ issues နာများ, သင်သိထားရမည့်ခြားနားချက်

MB_StrCut ရှိ Byte နှင့်ဇာတ်ကောင်ပြ issues နာများ, သင်သိထားရမည့်ခြားနားချက်

gitbox 2025-05-26

PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင် Multibyte strings များပြုလုပ်ခြင်းသည်ဘုံနှင့်အမှားအယွင်းများဖြစ်သည်။ အထူးသဖြင့် Strings ကိုကြားဖြတ်သည့်အခါ MB_StrCut function သည် multibyte စာလုံးများကိုကြားဖြတ်သောအခါအမှိုက်များပြ problems နာများကိုရှောင်ရှားရန် Substrcut function ကိုစုပ်ချေး သည့်ပြ problems နာများကိုရှောင်ရှားရန်မကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော် developer များစွာသည် MB_Strcut ရှိ Bytes နှင့်ဇာတ်ကောင်များအကြားခြားနားချက်နှင့် ပတ်သက်. သံသယ 0 င်သည်။ ဤဆောင်းပါးသည်သင့်အားလုပ်ငန်းကိုပိုမိုနားလည်ပြီးအသုံးပြုရန်ကူညီရန်နှစ်ခုအကြားကွဲပြားခြားနားမှုများကိုအသေးစိတ်ခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။

1 ။ mb_strcut function ကိုမိတ်ဆက်

MB_Strcut သည် PHP Multibyte String function library mbstring တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။

 string mb_strcut ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
  • $ str : string ကိုရိုက်ထည့်ပါ

  • $ Start : Starting အနေအထား, ယူနစ်သည် byte (byte) ဖြစ်သည်။

  • $ အရှည် : အရှည်ကိုကြားဖြတ်, ယူနစ်လည်း bytes (optional)

  • $ encoding : string encoding, internal encoding မှ default

2 ။ bytes နှင့်ဇာတ်ကောင်အကြားခြားနားချက်

  • Byte : ကွန်ပျူတာတစ်ခုတွင်ဒေတာသိုလှောင်မှု၏အခြေခံယူနစ်, 1 byte = 8 bits ။ byte သည်အင်္ဂလိပ်ဇာတ်ကောင်ကိုကိုယ်စားပြုသော်လည်းတရုတ်စာလုံးများသို့မဟုတ်အခြား multi-byte အက္ခရာများအတွက် bytes များစွာကိုမကြာခဏလိုအပ်သည်။

  • ဇာတ်ကောင် - အပြည့်အဝ "သင်္ကေတ" ကိုရည်ညွှန်းသည်ဖြစ်စေ,

ဥပမာ UTF-8 encoding တွင်တရုတ်ဇာတ်ကောင်သည်များသောအားဖြင့် 3 bytes 3 ခုနှင့်အင်္ဂလိပ်စာဇာတ်ကောင်အကောင့် 1 byte အတွက်စာရင်းပြုစုသည်။

3 ။ mb_strcut bytes အတွက် interptcepts

MB_Strcutcut ၏အဓိကအချက်မှာ ဒေါ်လာစျေး နှင့် $ အရှည် parameters များသည် bytes တွင်နှစ်မျိုးလုံးရှိကြသည်

ဆိုလိုသည်မှာသင်သည်တတိယအကြိမ်ဇာတ်ကောင်မှ စ. ဇာတ်ကောင် 5 လုံးကိုစတင်ကြားဖြတ်လိုပါက MB_StrCut ကို အသုံးပြု. ဇာတ်ကောင်တစ် ဦး စီ၏သိမ်းပိုက်ထားသော bytes အရေအတွက်ကိုတွက်ချက်ရန်လိုအပ်သည်။ ဇာတ်ကောင်အညွှန်းကိန်းကိုအသုံးပြုခြင်းသည်တိုက်ရိုက်ထုတ်လွှင့်မှုအမှားများကိုတိုက်ရိုက် ဦး တည်သွားစေပြီး bybled code ကို conbli-byte ဇာတ်ကောင်တစ်ဝက်ကိုကြားဖြတ်လိမ့်မည်။

4 ။ အဘယ်ကြောင့် mb_structut?

MB_SstrCut ၏အားသာချက်မှာ Multi-byte ဇာတ်ကောင်များ၏အလယ်အလတ်အပိုင်းကိုမဖြတ်နိုင်အောင်သေချာစေသည်။ Interception ကြားတွင် MB_StrCutut သည် ဇာတ်ကောင်များ၏အစိတ်အပိုင်းကိုဖြတ်ခြင်းနှင့်အမှိုက်များကို output မှကာကွယ်ရန်နယ်နိမိတ်ကိုအလိုအလျောက်ညှိလိမ့်မည်။

ဥပမာအားဖြင့်:

 <?php
$str = "မင်္ဂလာပါ,world!"; // "မင်္ဂလာပါ"တရုတ်အက်ခရာနှစ်လုံး,အင်္ဂလိပ်နှင့် exclamation အမှတ်အသားများကိုလိုက်နာကြသည်
echo mb_strcut($str, 0, 6, "UTF-8"); 
?>

အထက်ပါကုဒ်တွင် 6 byte အရှည်သည်တရုတ်စာလုံးနှစ်ဖက်၏ "သင်" နှင့် "ကောင်းသော" (တရုတ်ဇာတ်ကောင်တစ် ဦး လျှင် 3 bytes) ၏ Bytes အရေအတွက်အတိအကျဖြစ်သည်။ MB_StrCut သည် ဤတရုတ်စာလုံးနှစ်လုံးကိုဇာတ်ကောင်တစ်ဝက်မဖြတ်ဘဲမှန်ကန်စွာကြားဖြတ်လိမ့်မည်။

အကယ်. သင်သည် substr သို့မဟုတ်ကြားဖြတ်သည့် function ကိုစာလုံးများဖြင့်အသုံးပြုပါက Bytes သည် bytes များကို concled code ကိုဖြစ်စေရန်ဖြတ်သန်းနိုင်သည်။

5 ။ byte ယူနစ်များ၏တွက်ချက်မှုဥပမာ

MB_StrCut ၏ byte ယူနစ်များကိုနားလည်ပြီးနောက် Bytes အရေအတွက်ကိုတွက်ချက်ရာတွင် MB_strlen နှင့် MB_Substr ကို သုံးနိုင်သည်။ ဥပမာအားဖြင့်:

 <?php
$str = "မင်္ဂလာပါ,world!";
$encoding = "UTF-8";
for ($i = 0; $i < mb_strlen($str, $encoding); $i++) {
    $char = mb_substr($str, $i, 1, $encoding);
    $byteLen = strlen(mb_convert_encoding($char, "UTF-8", $encoding));
    echo "လူသူမ {$char} သိမ်းပိုက် bytes အရေအတွက်: {$byteLen}\n";
}
?>

ထုတ်လုပ်မှု -

 လူသူမ ခင်ဗျားတို့ သိမ်းပိုက် bytes အရေအတွက်: 3
လူသူမ ကောင်းသော သိမ်းပိုက် bytes အရေအတွက်: 3
လူသူမ , သိမ်းပိုက် bytes အရေအတွက်: 3
လူသူမ w သိမ်းပိုက် bytes အရေအတွက်: 1
လူသူမ o သိမ်းပိုက် bytes အရေအတွက်: 1
လူသူမ r သိမ်းပိုက် bytes အရေအတွက်: 1
လူသူမ l သိမ်းပိုက် bytes အရေအတွက်: 1
လူသူမ d သိမ်းပိုက် bytes အရေအတွက်: 1
လူသူမ ! သိမ်းပိုက် bytes အရေအတွက်: 3

၎င်းသည် Multibyte ဇာတ်ကောင်သည် UTF-8 တွင် Bytes မျိုးစုံရှိသည်ဟုဖော်ပြသည်။

6 ။ MB_SStrcut သို့မဟုတ် MB_Subrstr ကိုရွေးချယ်ပါ။

  • အကယ်. သင်ဟာ byte အရှည် အပေါ်အခြေခံပြီးကြိုးတွေကိုအခြေခံပြီး multi-byte ဇာတ်ကောင်တွေကိုအလယ်မှာဖြတ်တောက်ခြင်းကိုတားဆီးချင်ရင် MB_Strcut ကို သုံးသင့်တယ်။

  • ဇာတ်ကောင်အရေအတွက် ပေါ်မူတည်ပြီး string ကိုသင်ဖြတ်တောက်လိုပါက MB_Substr ကို အသုံးပြုသင့်သည်ဖြစ်စေ,

7 ။ မှတ်သားရန်အရာ

  • မှန်ကန်သော encoding ကိုသေချာစွာသတ်မှတ်ရန်သေချာပါစေ, မဟုတ်ရင် byte တွက်ချက်မှုသည်အမှားအယွင်းများဖြစ်နိုင်သည်။

  • ကွန်ယက်ထုတ်လွှင့ ခြင်း, ဒေတာဘေ့စသိုလှောင်ခြင်းသို့မဟုတ်ဖိုင်အမျိုးအစားများတွင်ကြိုးအရှည်သည်အကျင့်စာရိတ္တအရှည်ထက် ပို. အရေးကြီးသည်။

  • အကယ်. သင်သည် bytes နှင့်အက္ခရာများအကြားခြားနားချက်ကိုသင်အကျွမ်းတဝင်မရှိလျှင်သင်သည်ခြွင်းချက်များကိုခြွင်းချက်များနှင့် carbled code ပြ problems နာများကိုပြလေ့ရှိသည်။


 <?php
// နမူနာကုဒ်:အသုံးပြုmb_strcutကြားကြားUTF-8编码လူသူမ串的前6နေပြည်တော်(对应တရုတ်အက်ခရာနှစ်လုံး)
$str = "မင်္ဂလာပါ,world!";
$cutStr = mb_strcut($str, 0, 6, "UTF-8");
echo $cutStr; // ထုတ်လုပ်ခြင်း "မင်္ဂလာပါ"
?>