လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MB_StrCut strings strings stringsing အခါ mb_structcut function ကိုအတွက်ပုံမှန်အမှားများ

MB_StrCut strings strings stringsing အခါ mb_structcut function ကိုအတွက်ပုံမှန်အမှားများ

gitbox 2025-05-29

MB_Strcutut သည် PHP ကိုအသုံးပြုသည့်အခါ PHP ကိုအသုံးပြုသောအခါ PHP ကိုအသုံးပြုသောအခါအလွန်လက်တွေ့ကျသည့်လုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းသည်ရိုးရာ substr ကဲ့သို့သော multibyte ဇာတ်ကောင်များကိုဖြတ်တောက်ခြင်းကြောင့်ဖြစ်ပေါ်လာသော concled code ပြ problems နာများမရှိဘဲ string ၏သတ်မှတ်ထားသော byte အရှည်ကိုကြားဖြတ်နိုင်ခဲ့သည်။ သို့သော်ဒေတာဘေ့စ်တွင်ကြိုးများကိုင်းရှောင်းစုများတွင်ကြိုးတပ်များလုပ်ကိုင်သောအခါအထူးသဖြင့်ဘာသာစကားမျိုးစုံပါဝင်သည့်အကြောင်းအရာနှင့် encoding ပြောင်းလဲခြင်းအတွက် mb_structcut အသုံးပြုခြင်းကိုလည်းအချို့သောအမှားများကိုဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည်ဤသာမန်အမှားများကိုခွဲခြမ်းစိတ်ဖြာပါလိမ့်မည်။


1 ။ နိဒါန်း MB_Srccut သို့မိတ်ဆက်

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 ဖြစ်သည်။


2 ။ ဘုံအမှားအယွင်းများနှင့်အကြောင်းရင်းများ

1 ။ မကိုက်ညီသော encoding 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"
]);

2 ။ byte အနေအထားစတင်၏တွက်ချက်မှုအတွက်အမှား

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');

3 ။ မမှန်ကန်ကြောင်းကြားဖြတ်အရှည်သည်ဇာတ်ကောင်ကိုခြင်းကိုဖြစ်ပေါ်စေသည်

$ အရှည် သည် byte အရှည်ဖြစ်သည်။ အကယ်. ကြားဖြတ်သည့်အရှည်သည် Byte ဇာတ်ကောင်များ၏အလယ်တွင်ပါ 0 င်ပါက MB_Strecut သည် ဇာတ်ကောင်အပြည့်အစုံကိုလုံခြုံစွာပြုလုပ်လိမ့်မည်။

အဲဒါကိုဘယ်လိုရှောင်ရှားရမလဲ -

  • လိုအပ်ချက်များအတိုင်းကျိုးကြောင်းဆီလျော်အရှည်ကိုတွက်ချက်ပါ။

  • သင်သတ်မှတ်ထားသောစာလုံးအရေအတွက်ကိုကြားဖြတ်လိုပါက MB_Substr နှင့်ပေါင်းစပ်။ အသုံးပြုနိုင်သည်။


3 ။ လက်တွေ့ကျသောဥပမာများ

တရုတ် 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 ကိုအမှီပြုလိမ့်မည်မဟုတ်ပါ။


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

  • 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