: 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ဒရယ်会截断“ကောင်းသော”လူသူမ
?>
အမှားအယွင်း - ကြားဖြတ်ရလဒ်သည်မမှန်ကန်ပါ။ သို့မဟုတ် output သည်ပုံမှန်မဟုတ်သောဖြစ်သည်။
အကြောင်းမှာ - မှန်ကန်သော encoding ကိုအတိအလင်းမဖော်ပြပါက MB_StrCT သည် အတွင်းပိုင်း encoding (များသောအားဖြင့် mb_internal_encoding () ) ကိုအသုံးပြုသည်။
<?php
$str = "こんにちは";
echo mb_strcut($str, 0, 4); // သတ်မှတ်ထားသော encoding မရှိပါ,默认可能不ဟုတ်ကဲ့ UTF-8,ရလဒ်ပုံမှန်မဟုတ်သောဖြစ်ပါတယ်
?>
အမှားအယွင်း - function အမှားသို့မဟုတ်အပြုအမူမူမမှန်။
အကြောင်းရင်း - MB_Srstrcut (string, start posge) နှင့်တတိယ parameter (intercept parameter) နှင့်တတိယ parameter သည်ကိန်းဂဏန်းများနှင့်အရှည်ဖြစ်သည့်ကိန်းဂဏန်းများသို့မဟုတ်တန်ဖိုးများဖြစ်ရမည်။ အရေးအကြီးဆုံးသို့မဟုတ်အပျက်သဘောဆောင်သောတန်ဖိုးများကိုဖြတ်သန်းခြင်းသည်အမှားတစ်ခုဖြစ်ပေါ်စေလိမ့်မည်။
<?php
$str = "Hello World";
echo mb_strcut($str, "a", 5); // အဆိုပါစတင်အနေအထားတစ်ခုကိန်းဖြစ်သင့်သည်,传入လူသူမ符串会出错
?>
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"); // ထုတ်လုပ်ခြင်း:မင်္ဂလာပါ
?>
ပုံမှန် Encoding Misters မတိုက်ဆိုင်မှုကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုရှောင်ရှားရန် MB_Srstrcut ကို များသောအားဖြင့် "UTF-8" ဟုခေါ်ဆိုသည့်အခါစာလုံးပေါင်း encoding parameter များကိုအမြဲတမ်းသတ်မှတ်သင့်သည်။
<?php
$str = "こんにちは";
echo mb_strcut($str, 0, 6, "UTF-8");
?>
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");
?>
<?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 သည် ပိုမိုယုံကြည်စိတ်ချရလိမ့်မည်။