PHP ရှိ Multibyte ကြိုးများနှင့်ဆက်ဆံရာတွင်ကျွန်ုပ်တို့သည်ပိုမိုကောင်းမွန်သောယူနီစာသွယ်ဝိုက်ရေးအတွက် Mbstring extension ကိုကျွန်ုပ်တို့မကြာခဏမှီခိုလေ့ရှိသည်။ အထူးသဖြင့် MB_ereG_replace နှင့် MB_ereGi_replace သည် Byte-friendly ပုံမှန်အစားထိုးလုပ်ဆောင်မှုများဖြစ်သည်ဟုဆိုကြသည်။ developer အတော်များများက PCRE ကဲ့သို့ Unicode {pcre ကဲ့သို့ Unicode attribute များကိုသူတို့အသိအမှတ်ပြုနိုင်သည်ဟုမှားယွင်းစွာယုံကြည်ကြသည်။
ကံမကောင်းစွာပဲ, ဒီစိတ်ကူးမှားသည်။
ပထမ ဦး စွာ MB_ereG_replace နှင့် MB_ereG_replace သည် Oniguruma ကို အခြေခံ. ပုံမှန်အင်ဂျင်ကိုအသုံးပြုသည်။ သို့သော်၎င်းသည်အသုံးပြုသော syntax ပုံစံသည် Perl-Limited ပုံမှန်အသုံးအနှုန်းများ (PCRE) မဟုတ်သော်လည်းအကန့်အသတ်ရှိသော PONRE Variant ဖြစ်သည်။ Oniguruma ကိုယ်တိုင်က Unicode attribute ကိုကိုက်ညီမှုရှိမရှိမှတ်တိုင်မှာ PHP 7.3+ တွင် PREG_Match အထောက်အပံ့ပေးရမည် ။
ပုံမှန်နားလည်မှုလွဲခြင်းဥပမာတစ်ခုကိုကြည့်ကြစို့။
$text = 'ဒါ test ကေြနပ်သော 123';
$result = mb_eregi_replace('\p{Han}+', '', $text);
echo $result;
ဒီ script ကတရုတ်စာလုံးတွေကိုဖယ်ရှားပြီးအင်္ဂလိပ်နဲ့နံပါတ်တွေကိုထိန်းသိမ်းလိမ့်မယ်လို့ထင်သလား။ တကယ်တော့တော့မဟုတ်ဘူး။ MB_eregi_replace သည် ပုံမှန် backslash နှင့် အက် ခ ရာစ်အနေဖြင့်ပေါင်းစပ်ပါ ။ ၎င်းသည် Regex ကိုလုံးဝမမှန်ကန်ကြောင်းနှင့်တရုတ်စာလုံးများနှင့်မကိုက်ညီပါ။
Unicode Properties အတွက်ပံ့ပိုးမှုများကိုအကောင်အထည်ဖော်ရန်အတွက်မှန်ကန်သောနည်းလမ်းမှာ preg_replace ကို အသုံးပြုရန်နှင့် PHP သည် ကြိုး များကိုအနက်ဖွင့်ရန် Unicode mode ကိုသုံးရန် Unicode mode ကိုသုံးနိုင်သည်။
မှန်ကန်သောဥပမာကိုကြည့်ရအောင်။
$text = 'ဒါ test ကေြနပ်သော 123';
$result = preg_replace('/\p{Han}+/u', '', $text);
echo $result;
ထုတ်လုပ်မှု -
test 123
ဒါကငါတို့တကယ်လိုချင်တဲ့အကျိုးသက်ရောက်မှုပဲ။
MB_eregi_replace "Multi-byte အထောက်အပံ့" ရှိကြောင်းရှင်းပြချက်ကိုရှာဖွေတွေ့ရှိသူများကမူ၎င်းသည်ယူနီကုတ်ချို့ယွင်းမှုနှင့်ကိုက်ညီမှုရှိကြောင်း, ဥပမာအားဖြင့်, MB_ereGi_replace \ P {HAN} ကိုရှာဖွေပါက, သင်သည်မရေမတွက်နိုင်သောသို့မဟုတ်ခေတ်မမီတော့ရှင်းလင်းချက်အချို့ကိုတွေ့နိုင်သည်။
ထို့အပြင်သင်၏စီမံကိန်းသည်ပုံမှန်အားဖြင့် MB_ereGi_replace ကို အသုံးပြုရန်အသုံးပြုပါကတရုတ်သို့မဟုတ်အခြားယူနိုက်တက်စာလုံးများကိုကိုင်တွယ်ဖြေရှင်းရာတွင်စွဲချက်တင်ရာတွင်အထူးသဖြင့်စာသားသန့်ရှင်းရေးနှင့်ဒေတာထုတ်ယူခြင်းကဲ့သို့သောအလုပ်များတွင်မပြည့်စုံသောဒေတာများကိုစစ်ထုတ်ခြင်းများပြုလုပ်နိုင်သည်။
ရိုးရိုးသားသားပြောရရင်မင်းကအဲဒါကိုမသုံးတော့ဘူး။ သို့သော်၎င်းလိုက်လျောညီထွေဖြစ်အောင်လိုအပ်ချက်များအတွက်အသုံးပြုရန်လိုအပ်ပါကတရုတ်စာလုံးများအတွက် Unicode Range encoding ကိုအသုံးပြုရန်စဉ်းစားနိုင်သည်။
$text = 'ဒါ test ကေြနပ်သော 123';
$result = mb_eregi_replace('[တစ်-နှင်းဆီပင်]+', '', $text);
echo $result;
ဤချဉ်းကပ်မှုသည်မလုံလောက်သော်လည်း (ဥပမာအားဖြင့်၎င်းသည်တရုတ်ဇာတ်ကောင် extensions အားလုံးနှင့်မကိုက်ညီပါက၎င်းသည်ယခင်ကအဆင်သင့်ဖြစ်နေသည် ။ တိကျမှန်ကန်မှုကိုတိုးတက်စေရန်တရုတ်၏လက်ခဏာမျိုးစုံကိုကိုယ်တိုင်စာရင်းပြုစုနိုင်သည်။
ပိုမိုကောင်းမွန်သောချဉ်းကပ်နည်းသည် preg_replace သို့လုံးလုံးလှည့်ရန်နှင့် Mbstring.functring.functringloverload သို့မဟုတ်သင့်လျော်သော Multibyte Support မူဝါဒများကိုသေချာစေရန်ဖြစ်သည်။ ၎င်းသည် PCRE ၏စွမ်းအားကိုတိုးမြှင့်စေသည်။
MB_ereGi_replace ('\ P {Han}), ... ) ကို မလှည့်ပါနှင့်။ Unicode Properties များကိုကိုင်တွယ်ရန်လိုအပ်ပါကယုံကြည်စိတ်ချရသောတစ်ခုတည်းသောရွေးချယ်မှုမှာ PREG_RELE ကို UPRIFIER နှင့်အတူ PREG_RELLE ဖြစ်သည်။ ဤနားလည်မှုလွဲခြင်းနားလည်မှုလွဲသည်နှစ်များတစ်လျှောက် PHP developer များစွာကိုစိတ်အနှောင့်အယှက်ဖြစ်စေသည်။ ၎င်းသည်အရင်းအမြစ်ကိုပြင်ဆင်ရန်အချိန်ဖြစ်သည်။