လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Interceptception အတွင်းအမှားများကိုရှောင်ရှားရန် MB_StrCTCUT အကြံပြုချက်များ

Interceptception အတွင်းအမှားများကိုရှောင်ရှားရန် MB_StrCTCUT အကြံပြုချက်များ

gitbox 2025-05-26

PHP ရှိ Multibyte ကြိုးများကိုပြုပြင်သည့်အခါအသုံးပြုသော function သည် mb_structcut ဖြစ်ပြီး bytes အရေအတွက်အပေါ် အခြေခံ. သံကြိုးများကိုဖြတ်ကျော်ပြီး Multibyte encoded text processing လုပ်ရန်သင့်လျော်သည်။ သို့သော် developer များစွာသည် mb_structut ကို ကြားဖြတ်. Transpression ကို ကြားဖြတ်. Conbled Interepting ရလဒ်များသို့မဟုတ် truncating feart or truncating forbating ရလဒ်များဖြစ်ပေါ်လာသည်။ ဤဆောင်းပါးသည် MB_structcut ကို encoding အမှားအယွင်းများကိုရှောင်ရှားရန်နှင့်လက်တွေ့ကျသောအကြံပြုချက်များမျှဝေရန်မည်သို့မှန်ကန်စွာအသုံးပြုရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။


mb_strcut ဆိုတာဘာလဲ။

mb_strcut သည် PHP ၏ Multibyte strings of strings များကြားဖြတ်ခြင်းဖြင့်ကြားဖြတ်ခြင်းအတွက်လုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ MB_SubrcrCut နှင့်မတူဘဲ MB_Strcut သည် bytes များမဟုတ်ဘဲ bytes များအပေါ် အခြေခံ. ကြားဖြတ်နေသည်။ ၎င်းသည် byte encoding နှင့်ဆက်ဆံရာတွင်အကြားအာရုံစူးစိုက်မှုအရှည်ကိုဖြတ်တောက်ခြင်း,

function ရှေ့ပြေးပုံစံ:

 mb_strcut(string $str, int $start, ?int $length = null, ?string $encoding = null): string
  • $ str : string ကိုရိုက်ထည့်ပါ။

  • $ start : bytes အရေအတွက်အားဖြင့်တွက်ချက်, တွက်ချက်မှုကိုစတင်ပါ။

  • $ အရှည် : ကြားဖြတ်ကြားဖြတ် bytes အရေအတွက် (optional ကို) ။

  • $ encoding : string encoding, internal encoding ကိုပုံမှန်အားဖြင့်အသုံးပြုသည်။


ငါဘာလို့ encoding အမှားအယွင်းများရသနည်း။

string ကိုကြားဖြတ်ရန် MB_STRCANT ကို အသုံးပြုရန်အတွက် MB_StrCut ကိုအသုံးပြုရန်အတွက် ဒေါ်လာစျေး သို့မဟုတ် $ အရှည်သည် Multi-byte character အလယ်၌မသင့်လျော်ပါကအမှိုက်များသည် bybled code များမပြည့်စုံသောကြောင့်ပေါ်လာလိမ့်မည်။ အထူးသဖြင့် UTF-8 encoding အတွက်တရုတ်ဇာတ်ကောင်ကိုယေဘုယျအားဖြင့် 3 bytes ဖြင့်ဖွဲ့စည်းထားသည်။ Bytes ကိုကြားဖြတ်သောအခါ, အစမှတ်နှင့်အဆုံးမှတ်သည်ဇာတ်ကောင်နယ်နိမိတ်နှစ်မျိုးလုံးဖြစ်ကြောင်းသေချာစေရန်လိုအပ်သည်။


Coding အမှားများကိုရှောင်ရှားရန်လက်တွေ့ကျသောအချက်များ

1 ။ ရှင်းရှင်းလင်းလင်း encoding ကိုသတ်မှတ်ပါ

MB_StrCut ကို အတိအလင်းခေါ်ယူခြင်းသည် string ၏ encoding ကိုအတိအလင်းဖော်ပြသည့်အခါရှေ့နောက်မ 0 င်သော default encoding ကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုရှောင်ရှားရန်ပထမခြေလှမ်းဖြစ်သည်။

 $encoding = 'UTF-8';
$result = mb_strcut($str, $start, $length, $encoding);

2 ။ နယ်နိမိတ်များကိုရှာဖွေရန် MB_Strlen နှင့် MB_Substr ကို သုံးပါ

ကြားဖြတ်ခြင်းမပြုမီ MB_strlen ကို ဒေါ်လာ စျထေး အောင်လုပ်ရန်အတွက် string character length ကိုအကွာအဝေးနှင့်အကွာအဝေးမှရှောင်ရှားရန် MB_strlen ကို သုံးပါ။ တစ်ချိန်တည်းမှာပင် MB_substr ကို အပိုင်းတစ်ပိုင်းကိုမဖြတ်နိုင်အောင် MB_substr ကိုပေါင်းစပ်ပါ။

 $length = 10;
if (mb_strlen($str, $encoding) > $length) {
    $result = mb_substr($str, 0, $length, $encoding);
} else {
    $result = $str;
}

3 ။ mb_structcut နှင့် mb_strlen ကို bytes နှင့် cross ည့်သည်ပြောင်းလဲခြင်းအတွက်ပေါင်းစပ်ခြင်း

အကယ်. သင်သည် Bytes အရေအတွက်နှင့်ကြားဖြတ်ရန်လိုပါကကြားဖြတ် byte အကွာအဝေးနှင့်သက်ဆိုင်သောဇာတ်ကောင်အပြည့်အစုံကိုတွက်ချက်ပါ, ပြီးနောက် intercept လုပ်ရန် mb_substr ကို သုံးပါ။

 function safe_mb_strcut(string $str, int $start, int $length, string $encoding = 'UTF-8'): string {
    $substr = mb_strcut($str, $start, $length, $encoding);
    // mb_strcut တခါတရံတွင်ဇာတ်ကောင်တစ်ဝက်ကိုဖြတ်နိုင်သည်,transcoding ကတရားဝင်ရှိမရှိအတည်ပြု
    if (mb_check_encoding($substr, $encoding)) {
        return $substr;
    }
    // မပြည့်စုံလျှင်,လျှော့ချ,ပြည့်စုံသည်အထိ
    while ($length > 0 && !mb_check_encoding($substr, $encoding)) {
        $length--;
        $substr = mb_strcut($str, $start, $length, $encoding);
    }
    return $substr;
}

4 ။ ဥပမာ - UTF-8 Multibyte string ကိုကိုင်တွယ်

 $str = "ဒီစမ်းသပ်မှု string ကိုဖြစ်ပါတယ်,တရုတ်ပါဝင်ပြီးEnglish";
$start = 0;
$length = 15;  // bytes အားဖြင့်ကြားဖြတ်

$result = safe_mb_strcut($str, $start, $length, 'UTF-8');
echo $result;

၎င်းသည် byte truncation ကြောင့်ဖြစ်ရတဲ့ဆံပင်ကျပြ problem နာကိုရှောင်ရှားသည်။


အကျဉ်းချုပ်

  • mb_strcut သည် bytes အားဖြင့် Multi-byte strings များကိုကြားဖြတ်။ ဇာတ်ကောင်တစ်ဝက်ကိုရှောင်ရှားရန်ဇာတ်ကောင်နယ်နိမိတ်ကိုအာရုံစိုက်ပါ။

  • function အပြုအမူကိုတသမတ်တည်းကြောင်းသေချာစေရန် encoding parameters တွေကိုခွဲခြားသတ်မှတ်။

  • ကြားဖြတ်ရွေးချယ်ထားသောရလဒ်များ၏ encoding သမာဓိကို MB_Check_encoding နှင့်ပေါင်းစပ်။ အတည်ပြုနိုင်သည်။

  • mb_strlen နှင့် mb_subrcr ကိုပေါင်းစပ်ခြင်းကစာလုံးအကြားအာရုံစိုက်ရန်လိုအပ်သည့်အခါပိုမိုလုံခြုံသည်။

အထက်ပါနည်းစနစ်များမှတဆင့် PHP တွင် Multi-byte string interception တွင် Encoding အမှားများကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီးစာသားပြုပြင်ခြင်းနှင့်အသုံးပြုသူအတွေ့အကြုံ၏တိကျမှုကိုသေချာစေနိုင်သည်။


 <?php
function safe_mb_strcut(string $str, int $start, int $length, string $encoding = 'UTF-8'): string {
    $substr = mb_strcut($str, $start, $length, $encoding);
    if (mb_check_encoding($substr, $encoding)) {
        return $substr;
    }
    while ($length > 0 && !mb_check_encoding($substr, $encoding)) {
        $length--;
        $substr = mb_strcut($str, $start, $length, $encoding);
    }
    return $substr;
}

$str = "ဒီစမ်းသပ်မှု string ကိုဖြစ်ပါတယ်,တရုတ်ပါဝင်ပြီးEnglish";
$start = 0;
$length = 15;

echo safe_mb_strcut($str, $start, $length, 'UTF-8');
?>

PHP string processing အကြောင်းပိုမိုလေ့လာလိုပါကအောက်ပါအရင်းအမြစ်များကိုရယူနိုင်သည်။

 $url = "https://gitbox.net/php/manual/zh/function.mb-strcut.php";