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

mb_strcut အတွက်ဘုံအမှားအယွင်းများနှင့်ဖြေရှင်းချက်

gitbox 2025-05-26

1 ။ ဘုံအမှားအမျိုးအစားများနှင့်အကြောင်းရင်းများကိုခွဲခြမ်းစိတ်ဖြာခြင်း

1 ။ Barbled Code သို့မဟုတ်ဇာတ်ကောင်ချိုး၏ရလဒ်ကိုကြားဖြတ်

: MB_StrCut ကိုအသုံးပြုပြီး string string ကို concled code ပေါ်လာပြီးကြားဖြတ်သည့်အခါသို့မဟုတ်ကြားဖြတ် string ၏အဆုံးတွင်ဇာတ်ကောင်များသည်မပြည့်စုံပါ။

အကြောင်းပြချက် - MB_StrCut သည် strings များကို character မဟုတ်ဘဲ bytes အားဖြင့်ရပ်တည်ရန်ဖြစ်သည်။ အကယ်. ကြားဖြတ်အနေအထားသည် Multibyte ဇာတ်ကောင်အလယ်တွင်အတိအကျကျလျှင်ဇာတ်ကောင်သည်ချိုးဖောက်လိမ့်မည်။

 <?php
$str = "မင်္ဂလာပါ,ကမ်ာဘ";
echo mb_strcut($str, 0, 5, "UTF-8"); 
// output ကို garbled ဖြစ်နိုင်သည်,အကေြာင်းမှာ“ခင်ဗျားတို့”ဟုတ်ကဲ့3ဒရယ်,“ကောင်းသော”ဟုတ်ကဲ့3ဒရယ်,ကြားကြား5ဒရယ်会截断“ကောင်းသော”လူသူမ
?>

2 ။ ဇာတ်ကောင် encoding မှန်ကန်စွာသတ်မှတ်ထားသောမဟုတ်ပါဘူး

အမှားအယွင်း - ကြားဖြတ်ရလဒ်သည်မမှန်ကန်ပါ။ သို့မဟုတ် output သည်ပုံမှန်မဟုတ်သောဖြစ်သည်။

အကြောင်းမှာ - မှန်ကန်သော encoding ကိုအတိအလင်းမဖော်ပြပါက MB_StrCT သည် အတွင်းပိုင်း encoding (များသောအားဖြင့် mb_internal_encoding () ) ကိုအသုံးပြုသည်။

 <?php
$str = "こんにちは";
echo mb_strcut($str, 0, 4); // သတ်မှတ်ထားသော encoding မရှိပါ,默认可能不ဟုတ်ကဲ့ UTF-8,ရလဒ်ပုံမှန်မဟုတ်သောဖြစ်ပါတယ်
?>

3 ။ ဝင်လာသော parameter သည် type အမှား

အမှားအယွင်း - function အမှားသို့မဟုတ်အပြုအမူမူမမှန်။

အကြောင်းရင်း - MB_Srstrcut (string, start posge) နှင့်တတိယ parameter (intercept parameter) နှင့်တတိယ parameter သည်ကိန်းဂဏန်းများနှင့်အရှည်ဖြစ်သည့်ကိန်းဂဏန်းများသို့မဟုတ်တန်ဖိုးများဖြစ်ရမည်။ အရေးအကြီးဆုံးသို့မဟုတ်အပျက်သဘောဆောင်သောတန်ဖိုးများကိုဖြတ်သန်းခြင်းသည်အမှားတစ်ခုဖြစ်ပေါ်စေလိမ့်မည်။

 <?php
$str = "Hello World";
echo mb_strcut($str, "a", 5); // အဆိုပါစတင်အနေအထားတစ်ခုကိန်းဖြစ်သင့်သည်,传入လူသူမ符串会出错
?>

2 ။ ဤပြ problems နာများကိုထိရောက်စွာဖြေရှင်းနိုင်ပုံ။

1 ။ ဇာတ်ကောင်ချိုးကိုရှောင်ရှားရန်ဖြေရှင်းချက်

MB_SartCut သည် Bytes မှကြားဖြတ်နေပြီးဖြစ်သောကြောင့်ကြားဖြတ်သည့်အရှည်သည် Multibyte အက္ခရာများကိုဖြတ်တောက်ရန်မလိုအပ်ကြောင်းသေချာအောင်လုပ်ပါ။ အသုံးများသောနည်းလမ်းမှာ Multi-byte ဇာတ်ကောင်အရှည်ကို ဦး စွာတွက်ချက် ရန် ,

 <?php
$str = "မင်္ဂလာပါ,ကမ်ာဘ";
// အသုံးပြု mb_substr 按လူသူမ符ကြားကြား,避免截断လူသူမ符
echo mb_substr($str, 0, 2, "UTF-8"); // ထုတ်လုပ်ခြင်း:မင်္ဂလာပါ
?>

အကယ်. သင်သည် MB_StrCut ကို သုံးရန်လိုပါက Bytes အရေအတွက်သည်ဇာတ်ကောင်အပြည့်အစုံ၏နယ်နိမိတ်ဖြစ်သည်ကိုသေချာအောင်လုပ်ပါ။

 <?php
$str = "မင်္ဂလာပါ,ကမ်ာဘ";
$length = 6; // 3ဒရယ် * 2个လူသူမ符
echo mb_strcut($str, 0, $length, "UTF-8"); // ထုတ်လုပ်ခြင်း:မင်္ဂလာပါ
?>

2 ။ ရှင်းရှင်းလင်းလင်းဇာတ်ကောင် encoding ကိုဖော်ပြပါ

ပုံမှန် Encoding Misters မတိုက်ဆိုင်မှုကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုရှောင်ရှားရန် MB_Srstrcut ကို များသောအားဖြင့် "UTF-8" ဟုခေါ်ဆိုသည့်အခါစာလုံးပေါင်း encoding parameter များကိုအမြဲတမ်းသတ်မှတ်သင့်သည်။

 <?php
$str = "こんにちは";
echo mb_strcut($str, 0, 6, "UTF-8");
?>

3 ။ parameter အတည်ပြုချက်နှင့်အမျိုးအစား casting

MB_StrCut ကို မသုံးမီ, အဝင်စတင်အနေအထားနှင့်အရှည် parameters များသည်အနုတ်လက်ခဏာမဟုတ်သောကိန်းများဖြစ်ကြောင်းသေချာအောင်လုပ်ပါ။ အမှားများကိုရှောင်ရှားရန်အတွက် intval (filter_var () filter_var () ကဲ့သို့သောလုပ်ဆောင်မှုများမှတဆင့်ပြောင်းလဲခြင်းနှင့်စစ်ဆေးခြင်းကိုသင်ရိုက်ကူးနိုင်သည်။

 <?php
$start = intval($_GET['start'] ?? 0);
$length = intval($_GET['length'] ?? 10);

$str = "Hello, ကမ်ာဘ";
echo mb_strcut($str, $start, $length, "UTF-8");
?>

3 ။ ဥပမာ - ပြည့်စုံသောလျှောက်လွှာ

 <?php
function safe_mb_strcut(string $string, int $start, int $length = null, string $encoding = 'UTF-8'): string {
    // Start အနေအထားနှင့်အရှည်သည်အနုတ်လက်ခဏာမဟုတ်သောကိန်းများဖြစ်ကြောင်းသေချာပါစေ
    $start = max(0, $start);
    if ($length !== null) {
        $length = max(0, $length);
    }
    
    // 获取လူသူမ符串ဒရယ်长度
    $byteLength = strlen(mb_convert_encoding($string, 'UTF-8'));
    if ($start > $byteLength) {
        return '';
    }
    
    if ($length === null) {
        $length = $byteLength - $start;
    } else if ($start + $length > $byteLength) {
        $length = $byteLength - $start;
    }
    
    return mb_strcut($string, $start, $length, $encoding);
}

// အသုံးပြု示例
$str = "မင်္ဂလာပါ,GitBoxအသုံးပြုသူ!";
echo safe_mb_strcut($str, 0, 9, "UTF-8"); // ကြားကြား前3个汉လူသူမ
?>

အထက်ဖော်ပြပါဆန်းစစ်ခြင်းနှင့်ဥပမာများမှတဆင့် MB_StrCTCT ကို အသုံးပြုရန်သော့သည်မှန်ကန်စွာဖြစ်သည်။

  • အတိအလင်းဇာတ်ကောင် encoding ကိုဖော်ပြ;

  • parameter သည် type မှန်ကန်သောနှင့်တရားဝင်ကြောင်းသေချာပါစေ,

  • သတိပြုရမည်မှာ bytes များကို byte အက္ခရာများ ဖြင့် ဖြတ်တောက်ခြင်းမဟုတ်,

ဤနည်းစနစ်များကိုကျွမ်းကျင်ပြီးနောက် MB_StrCTCT သည်ဘုံအမှားများကိုရှောင်ရှားသည့်အခါ MB_Strecutt သည် ပိုမိုယုံကြည်စိတ်ချရလိမ့်မည်။