MB_Strcutut သည် PHP ကိုအသုံးပြုသည့်အခါ PHP ကိုအသုံးပြုသောအခါ PHP ကိုအသုံးပြုသောအခါအလွန်လက်တွေ့ကျသည့်လုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းသည်ရိုးရာ substr ကဲ့သို့သော multibyte ဇာတ်ကောင်များကိုဖြတ်တောက်ခြင်းကြောင့်ဖြစ်ပေါ်လာသော concled code ပြ problems နာများမရှိဘဲ string ၏သတ်မှတ်ထားသော byte အရှည်ကိုကြားဖြတ်နိုင်ခဲ့သည်။ သို့သော်ဒေတာဘေ့စ်တွင်ကြိုးများကိုင်းရှောင်းစုများတွင်ကြိုးတပ်များလုပ်ကိုင်သောအခါအထူးသဖြင့်ဘာသာစကားမျိုးစုံပါဝင်သည့်အကြောင်းအရာနှင့် encoding ပြောင်းလဲခြင်းအတွက် mb_structcut အသုံးပြုခြင်းကိုလည်းအချို့သောအမှားများကိုဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည်ဤသာမန်အမှားများကိုခွဲခြမ်းစိတ်ဖြာပါလိမ့်မည်။
MB_Strcut သည်စာလုံးအရေအတွက်မဟုတ်ဘဲ string မှသတ်မှတ်ထားသော bytes များကိုဖြတ်တောက်ရန်ဖြစ်သည်။ ၎င်းသည် Multi-byte encoding အတွက်ဒီဇိုင်းပြုလုပ်ထားပြီး byte စာလုံးတစ်လုံးကိုဖြတ်ခြင်းကြောင့်ဖြစ်သည်။
function ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
mb_strcut(string $string, int $start, int $length = null, string $encoding = null): string
$ string : string ကိုရိုက်ထည့်ပါ။
$ start : byte အနေအထားစတင်။
$ အရှည် : ကြားဖြတ် byte အရှည် (optional ကို) ။
$ encoding : ဇာတ်ကောင် encoding, default သည် internal encoding ဖြစ်သည်။
ဒေတာဘေ့စ်တွင်သိမ်းထားသော string encoding သည် mb_structcut အသုံးပြုသော encoding နှင့်ကိုက်ညီမှုမရှိပါ။ ဥပမာအားဖြင့်, ဒေတာဘေ့စလယ်ကွင်းသည် UTF-8 encoding ဖြစ်သည်။ သို့သော်ပရိုဂရမ်သည် default internal encoding (iso-8859-1) ကိုအသုံးပြုသည်။
အမှားအယွင်းများ
အဆိုပါကြားဖြတ်ရလဒ်သည် garbled ဖြစ်ပြီးဇာတ်ကောင်များသည်မပြည့်စုံပါ။
အဲဒါကိုဘယ်လိုရှောင်ရှားရမလဲ:
ဥပမာ encoding ကို ဖော်ထုတ်ပါ။
mb_strcut($string, 0, 10, 'UTF-8');
ဒေတာဘေ့စ်ဆက်သွယ်မှုများနှင့်စုံစမ်းမှုရလဒ်များကို encoding ရလဒ်များသည်ပရိုဂရမ်တွင် encoding နှင့်ကိုက်ညီကြောင်းသေချာပါစေ။ MySQL ကွပ်မျက်ခံရနိုင်ပါတယ်:
SET NAMES 'utf8mb4';
သို့မဟုတ် PDO ဆက်သွယ်မှုကိုသတ်မှတ်မည်။
new PDO('mysql:host=...;dbname=...', $user, $pass, [
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
]);
MB_Strcutcut ၏ $ Start Pareter သည် byte အနေအထားမဟုတ်, ဇာတ်ကောင်အနေအထားမဟုတ်ဘဲ byte အနေအထားဖြစ်သည်။ အကယ်. developer များအနေဖြင့် Byte ရာထူးများကဲ့သို့ဇာတ်ကောင်ရာထူးများကိုဖြတ်သန်းရန်အသုံးပြုသည်ဆိုပါက၎င်းသည်ကြားဖြတ်နေရာသွေဖည်မှုကို ဦး တည်သွားလိမ့်မည်။
အမှားအယွင်းများ
ကြားဖြတ်သည့် string သည်မျှော်လင့်ချက်များမှစတင်သည်။
အဲဒါကိုဘယ်လိုရှောင်ရှားရမလဲ -
byte အနေအထားကိုရရန် MB_STRPOS ကိုအသုံးပြုသောအခါ ကျေးဇူးပြု. တူညီသော encoding ကိုသတ်မှတ်ပါ။
သငျသညျဇာတ်ကောင်ရာထူးများကိုအသုံးပြုလိုပါက, သင်ပထမ ဦး ဆုံးဇာတ်ကောင်အနေအထားကို byte အနေအထားသို့ပြောင်းလဲပစ်ရပေမည်။
ဥပမာ -
$pos_char = 3; // 1 ။3ဇာတ်ကောင်
$pos_byte = strlen(mb_substr($string, 0, $pos_char, 'UTF-8'));
$result = mb_strcut($string, $pos_byte, 10, 'UTF-8');
$ အရှည် သည် byte အရှည်ဖြစ်သည်။ အကယ်. ကြားဖြတ်သည့်အရှည်သည် Byte ဇာတ်ကောင်များ၏အလယ်တွင်ပါ 0 င်ပါက MB_Strecut သည် ဇာတ်ကောင်အပြည့်အစုံကိုလုံခြုံစွာပြုလုပ်လိမ့်မည်။
အဲဒါကိုဘယ်လိုရှောင်ရှားရမလဲ -
လိုအပ်ချက်များအတိုင်းကျိုးကြောင်းဆီလျော်အရှည်ကိုတွက်ချက်ပါ။
သင်သတ်မှတ်ထားသောစာလုံးအရေအတွက်ကိုကြားဖြတ်လိုပါက MB_Substr နှင့်ပေါင်းစပ်။ အသုံးပြုနိုင်သည်။
တရုတ် string ကိုဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားကြောင်းယူဆလျှင်ပထမ 10 bytes ကိုကြားဖြတ်လိုသည်။
<?php
// ဒေတာဘေ့စမှကြိုးများကိုရယူပါ
$string = "မင်္ဂလာပါ,ဝမ်းသာစွာနှုတ်ဆက်ခြင်းmb_strcutလုပ်ဆောင်ချက်!";
// encoding ကိုသတ်မှတ်ပါ
$encoding = 'UTF-8';
// ကြားဖြတ်မတိုင်မီ10နေပြည်တော်
$result = mb_strcut($string, 0, 10, $encoding);
echo $result;
?>
ဤဥပမာတွင် MB_Strcut သည်တရုတ်ဇာတ်ကောင်တစ်ဝက်ကိုဖြတ်တောက်မည်မဟုတ်ကြောင်းနှင့် output string ကိုအမှီပြုလိမ့်မည်မဟုတ်ပါ။
MB_StrCut ကို အသုံးပြုသည့်အခါ၎င်းကိုရှင်းရှင်းလင်းလင်း encode လုပ်ပြီးဒေတာဘေ့စ် encoding နှင့်ကိုက်ညီပါ။
$ Start နှင့် $ အရှည်သည် byte ယူနစ်များမဟုတ်ဘဲ byte ယူနစ်နှစ်ခုလုံးဖြစ်သည်။ ထို့ကြောင့်၎င်းတို့ကိုဂရုတစိုက်တွက်ချက်ရန်လိုအပ်သည်။
စာဝှက်ခြင်းမရှိသောအမှားများကိုရှောင်ရှားရန်ဒေတာဘေ့စ်ဇာတ်လမ်းညှိချက်များနှင့်ညှိနှိုင်းဆောင်ရွက်ခြင်းနှင့်ညှိနှိုင်းဆောင်ရွက်ခြင်း။
အက်ခရာကြားဖြတ်မှုအတွက် MB_Substr ကို အသုံးပြုရန်အကြံပြုသည်။ MB_StrCut သည် Byte Intercept ကြားဖြတ်နေသည့်အခြေအနေများအတွက်ပိုမိုသင့်တော်သည်။
အထက်ပါကျွမ်းကျင်မှုများကိုကျွမ်းကျင်သောကျွမ်းကျင်မှုသည်ဒေတာဘေ့စ် string ကိုပြုပြင်ခြင်းတွင်ပုံမှန်အမှားများကို mb_structcut မှ ထိရောက်စွာရှောင်ရှားနိုင်ပြီးအစီအစဉ်မှရလဒ်များသည် Multi-byte strings များကိုမှန်ကန်သောနှင့်လုံခြုံစိတ်ချရသောကြိုးများမှန်ကန်ကြောင်းသေချာစေနိုင်သည်။
<?php
// နမူနာ:ဒေတာဘေ့စ်တွင် Centrent Multibyte Strings Security Multibyte ကြိုး
// ဒေတာဘေ့စ်ချိတ်ဆက်ကြောင်းယူဆ,နှင့်ဇာတ်ကောင်အစုံဖြစ်ပါတယ်utf8mb4
// ဒေတာဘေ့စမှကြိုးများကိုဖတ်ပါ
$query = "SELECT content FROM articles WHERE id = 1";
$result = $pdo->query($query);
$row = $result->fetch(PDO::FETCH_ASSOC);
$content = $row['content'];
$encoding = 'UTF-8';
// ကြားဖြတ်မတိုင်မီ50နေပြည်တော်,concled code ကိုရှောင်ကြဉ်ပါ
$snippet = mb_strcut($content, 0, 50, $encoding);
echo $snippet;
?>
Multibyte String processing အကြောင်းပိုမိုလေ့လာလိုပါကသင်ကြည့်ရှုနိုင်သည် -
https://gitbox.net/php/php/hmaual/zh/Function.mb-stric.php