လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MB_SstrCut ကိုတရုတ်ကြိုးများကြားဖြတ်သည့်အခါဘုံပြ problems နာများကိုဖြေရှင်းပါ

MB_SstrCut ကိုတရုတ်ကြိုးများကြားဖြတ်သည့်အခါဘုံပြ problems နာများကိုဖြေရှင်းပါ

gitbox 2025-05-27

MB_Strcut တွင် PHP တွင် Multibyte ဇာတ်ကောင်များ (တရုတ်ကဲ့သို့) နှင့်ဆက်ဆံရာတွင်အလွန်လက်တွေ့ကျတဲ့လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည် byble strings များကို concled code ပြ problems နာများကိုရှောင်ရှားရန် Multi-byte ကြိုးများကိုလုံခြုံစွာကြားဖြတ်လေ့ရှိသည်။ သို့သော် Developer တော်တော်များများသည် MB_Strcut ကို အသုံးပြုသောအခါများစွာသောထောင်ထဲမှာများနှင့်အမှားများကိုကြုံတွေ့ရလိမ့်မည်။ ဤဆောင်းပါးသည်မည်သည့်လုပ်ဆောင်ချက်ကိုမှန်ကန်စွာအသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြပြီးဘုံပြ problems နာများသို့ဖြေရှင်းနည်းများကိုဖော်ပြရန်အသေးစိတ်ကိုအသေးစိတ်ဖော်ပြထားသည်။

1 ။ mb_structcut နှင့် mb_substrin အကြားခြားနားချက်ကိုနားလည်ပါ

မေးခွန်းကိုမတူးခင်မှာအရင်ကျကျနားလည်မှုလွဲ မှုကို အရင်ရှင်းရှင်းလင်းလင်းပြောပြပါရစေ

  • MB_Subrcr သည် "အက်ခရာ" ကို အခြေခံ. "ဇာတ်ကောင်" ကို အခြေခံ. "ဇာတ်ကောင်" ပေါ်တွင်အခြေခံသည်။

  • MB_StrCutut သည် "bytes" အပေါ် အခြေခံ. ကြားဖြတ်ဖြစ်သည်။ ၎င်းသည် byte အနေအထား မှစတင်. Bytes ၏နံပါတ်တစ်ခုကိုကြားဖြတ်ပြီးဇာတ်ကောင်သမာဓိကိုမဖျက်ဆီးရန်ကြိုးစားသည်။

ဆိုလိုသည်မှာတရုတ်ဘာသာဖြင့်လုပ်ဆောင်သည့်အခါ (များသောအားဖြင့် UTF-8 သည်နောက်တရုတ်ဇာတ်ကောင်ကို 3 bytes အဖြစ်သတ်မှတ်သည်), byte အနေအထားနှင့်အရှည်ကိုမတိကျသောတွက်ချက်မှုကိုတွက်ချက်ပါက,

2 ။ mb_strcut ကိုအသုံးပြုရန်မှန်ကန်သောနည်းလမ်း

ကျွန်ုပ်တို့သည်တရုတ် string ကိုကြားဖြတ်ရန်လိုအပ်ပြီး bytes မတိုက်ဆိုင်မှုကြောင့်ဇာတ်ကောင်များအကျင့်ပျက်ခြစားမှုကိုသေချာစေရန်လိုသည်ဆိုပါစို့။

 <?php
$str = "အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည်gitbox.net,ဒါကသရုပ်ပြဘို့တရုတ် string ကိုဖြစ်ပါတယ်。";
$cutStr = mb_strcut($str, 0, 18, "UTF-8");
echo $cutStr;
?>

အထက်ပါကုဒ်သည်ပထမ 18 bytes ကိုကြားဖြတ်ရန်ရည်ရွယ်သည်။ သို့သော်မှတ်ချက် -

  • အကယ်. string သည်တရုတ် (တရုတ်စာလုံး၏ 3 bytes 3 ခု) ပါ 0 င်ပါက 18 bytes ကိုဇာတ်ကောင်အလယ်၌သာဖြတ်နိုင်သည်။

  • mb_strcut သည် ဇာတ်ကောင်များကိုရှောင်ရှားရန်ကြိုးစားလိမ့်မည်။ သို့သော်၎င်း၏အပြုအမူသည်အသုံးပြုသော encoding ပေါ်တွင်မူတည်သည်။

ထို့ကြောင့် MB_SrastCut ၏စတုတ်ထ parameter (encoding) ကိုမှန်ကန်စွာသတ်မှတ်ထားရမည်, များသောအားဖြင့် "UTF-8" ဖြစ်သည်။

3 ။ မကြာခဏမေးခွန်းများနှင့်ဖြေရှင်းနည်းများမကြာခဏမေးတယ်

1 ။ output ကို garbled ကုဒ်

ဒါကအသုံးအများဆုံးပြ problem နာပါ။ အကြောင်းပြချက်များသောအားဖြင့်:

  • မှန်ကန်သော encoding မသတ်မှတ်ထားပါ။

  • Intercept ၏ starting အနေအထားသို့မဟုတ်အချိန်ကာလသည်ဇာတ်ကောင်ကိုဖြတ်တောက်စေသည်။

ဖြေရှင်းချက် -

အမြဲတမ်း UTF-8 encoding ကို သုံး. Output ပတ် 0 န်းကျင် (HTML စာမျက်နှာများကဲ့သို့) သည် UTF-8 ဖြစ်သည်။

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

2 ။ ကြားဖြတ်အရှည်မျှော်လင့်ချက်များနှင့်မကိုက်ညီပါ

ဥပမာအားဖြင့်, သင်သည် "10 bytes" အစား "အက်ခရာ 10 လုံး" အစား "10 bytes" အစားပြသလိုပါက MB_StrCut သည် အသုံးမ 0 င်ပါ။ သင် MB_substr ကို သုံးသင့်သည်။

 $cutStr = mb_substr($str, 0, 10, "UTF-8");

3 ။ ဇာတ်ကောင်ဆုံးရှုံးမှုသို့မဟုတ် truncation အမှား

အလယ်ကနေ Bytes ကိုစတင်ကြားဖြတ်သောအခါ (ဥပမာအားဖြင့် 5th byte မှစတင်. ) သည်ဇာတ်ကောင်အလယ်၌သာကျလိမ့်မည်။

အကြံပြုချက် -

  • ဇာတ်ကောင်နယ်နိမိတ်ကနေတတ်နိုင်သမျှအမြန်ဆုံးကြားဖြတ် (byte offsets ထက်) ။

  • အကယ်. သင်သည် bytes များအပေါ် အခြေခံ. လုပ်ဆောင်ရမည်ဆိုပါက output အကျိုးသက်ရောက်မှုကိုတဖြည်းဖြည်းချင်းစမ်းသပ်ရန် MB_StrCut ကို ပထမဆုံးအကြိမ်အသုံးပြုနိုင်သည်။

4 ။ encapsulationulation လုပ်ဆောင်ချက်များကိုအကြံပြု

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

 function safeCutStr($string, $length, $charset = "UTF-8") {
    return mb_strcut($string, 0, $length, $charset);
}

Page output မတိုင်မီတွင်နောက်ဆုံးဇာတ်ကောင်ပြီးပြည့်စုံသောနှင့်လိုအပ်ပါကမပြည့်စုံသောစာလုံးများကိုချန်လှပ်ထားခြင်းရှိမရှိဆုံးဖြတ်ရန် Post-process ကိုထည့်နိုင်သည်။

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

MB_StrcCut ကို အသုံးပြု. Multi-byte character sets များကိုကိုင်တွယ်သောအခါ MB_StrCCut ကိုအသုံးပြုခြင်းသည်ကြားဖြတ်ခြင်းစွမ်းရည်ကိုအမှန်တကယ်တိုးတက်စေနိုင်သည်, တတ်နိုင်သမျှအမှိုက်ပုံကုဒ်ပြ issues နာများကိုရှောင်ရှားရန်

  • အမြဲတမ်းမှန်ကန်သော encoding (ဥပမာ UTF-8 ကဲ့သို့) ကိုသတ်မှတ်ပါ။

  • စာလုံးများကိုကြားဖြတ်ရန် MB_Substr ကြိယာများကို တတ်နိုင်သမျှသုံးပါ။

  • ၎င်းကို bytes များကကြားဖြတ်နေပါက Encapsulture အမှားသည်းခံမှုကိုတုန့်ပြန်မှုကိုစဉ်းစားပါ။

MB_Strcut ကို အသုံးပြုခြင်းအားဖြင့်သင်၏ PHP အစီအစဉ်ကိုတရုတ်ကိုပြုပြင်သည့်အခါပိုမိုခိုင်မာသည့်တည်ငြိမ်မှုကိုပိုမိုခိုင်မာအောင်ပြုလုပ်နိုင်သည်။