လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Multibyte ဇာတ်ကောင် encoding အောက်ရှိ Substr_count function ကိုအသုံးပြုခြင်းအတွက်သိကောင်းစရာများ

Multibyte ဇာတ်ကောင် encoding အောက်ရှိ Substr_count function ကိုအသုံးပြုခြင်းအတွက်သိကောင်းစရာများ

gitbox 2025-06-03

PHP တွင် Substr_Count () function ကိုကျယ်ကျယ်ပြန့်ပြန့်သည် string တစ်ခုတွင်အကြိမ်အရေအတွက်ကိုတွက်ချက်ရန်ကျယ်ကျယ်ပြန့်ပြန့်အသုံးပြုသည်။ ASCII ဇာတ်ကောင်များနှင့်ဆက်ဆံရာတွင်အလွန်ထိရောက်နိုင်သည်မှာ UTF-8 ကဲ့သို့သော Multi-byte character encodings နှင့်ရင်ဆိုင်ရသောအခါမမျှော်လင့်သောရလဒ်များရနိုင်သည်။ ဤဆောင်းပါးသည် Multibyte ဇာတ်ကောင် encoding နှင့်ဆက်ဆံရာတွင် Substr_Count () လက်တွေ့ကျွမ်းကျင်မှုဆိုင်ရာကျွမ်းကျင်မှုများကိုမိတ်ဆက်ပေးလိမ့်မည်။

1 ။ အခြေခံအသုံးပြုမှုကိုပြန်လည်သုံးသပ်

Substr_count () ၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

<code> int substr_count (string $ haystack, string $ အပ် [, int $ offset =)) </ code>

ဒီ function ကို $ haystack အတွက် $ အပ် ငွေပမာဏပေါ်လာလိမ့်မယ်။ သတိပြုသင့်သည်မှာ၎င်းသည် strings များကို bytes များမှပြုလုပ်သော function များကိုပြုလုပ်ပြီးဇာတ်ကောင်နယ်နိမိတ်များကိုအသိအမှတ်မပြုပါ။

2 ။ Multi-byte စာလုံးများကြောင့်ဖြစ်ပေါ်လာသောပြနာများ

ဥပမာအားဖြင့်, သင်သည် "သင်" သည် string တစ်ခုတွင်ရှိသည့်တရုတ်ဇာတ်ကောင်ကိုအကြိမ်အရေအတွက်ရေတွက်ရန်ကြိုးစားပါကအမှားတစ်ခုရနိုင်သည်။

<code> $ str = "မင်္ဂလာပါ, မင်းတကယ်ကောင်းတယ်" echo substr_count ($ str, "", // output ကိုမမှန်ကန်ပါ။ </ code>

အကြောင်းပြချက်မှာတရုတ် "သင်" သည် UTF-8 တွင်သုံးခုရှိသည့်သုံးခု, ဤအခြေအနေသည်ကိုက်ညီသောအမှားများသို့မဟုတ်ပျောက်ဆုံးနေသောနံပါတ်များကိုအလွယ်တကူ ဦး ဆောင်နိုင်သည်။

3 ။ အစား substr_count ၏အထက် MB_substr ကိုအသုံးပြု။ သိကောင်းစရာများ ()

PHP တွင်အထူး mb_substr_count () function ကိုမရှိသော်လည်း MB_Substr () နှင့် MB_Strlen ကဲ့သို့သောလုပ်ဆောင်ချက်များကိုပေါင်းစပ်ခြင်းဖြင့်အလားတူသက်ရောက်မှုများကိုရရှိနိုင်ပါသည်။

ဥပမာအားဖြင့်, သင်သည် MB_SPLIT ကို သုံး. string ကိုခွဲထုတ်ရန်နှင့်ဖြစ်ပျက်မှုအရေအတွက်ကိုရေတွက်ရန်အသုံးပြုနိုင်သည်။

<code> $ str = "မင်္ဂလာပါ, မင်းတကယ်ကောင်းတယ်" $ ar arr = mb_split ("သင်", $ str); $ ရေတွက် = ရေတွက် ($ arr) - 1; ECHO $ ​​ရေတွက်; // မှန်ကန်သော output 2 </ code>>

ဤနည်းအားဖြင့် Byte အဆင့် Misjudgment ၏ပြ problem နာကိုရှောင်ရှားပြီး Multi-byte encoding အတွက်သင့်တော်သည်။

4 ။ ပုံမှန် mode ကို UTF-8 နှင့်သဟဇာတဖြစ်ပါတယ်

နောက်ထပ်ဘုံနည်းလမ်းမှာ UTF-8 MORFIER နှင့် PREG_MATCH_ALL () ကို အသုံးပြုရန်ဖြစ်သည်။

<code> $ str = "မင်္ဂလာပါ, မင်းတကယ်ကောင်းတယ်" Preg_Match_all ('/ un / u', $ str, $ ကိုက်ညီခြင်း); ECHO အရေအတွက် ($ ကိုက်ညီမှု [0]); // output 2 </ code>

/ u Modifier ဤနေရာတွင် UTF-8 mode ကိုသုံးရန် Regengine ကို Todes ကိုသုံးရန်ပြောလိုက်သည်။ ထို့ကြောင့် "သင်" ကိုဇာတ်ကောင်အဖြစ်မှန်ကန်စွာအသိအမှတ်ပြုသည်။

5 ။ ကိန်းဂဏန်းများအရ URL တွင်တိကျသောလမ်းကြောင်းများသို့မဟုတ် parameters များကိုကြာရှည်ခံသည်

အကယ် . သင် URL ပါ 0 င်သည့် string တစ်ခုပါ 0 င်ပါက URL တွင်တရုတ်လမ်းကြောင်းများသို့မဟုတ် parameters များပါ 0 င်သည်။ ဥပမာအားဖြင့်:

<code> $ url = "" https://gitbox.net/hello/hello.html "; $ decoded = urldecode ($ URL); Preg_match_all ('/ မင်္ဂလာပါ / u', $ decoded, $ ကိုက်ညီ; ECHO အရေအတွက် ($ ကိုက်ညီမှု [0]); // output 2 </ code>

၎င်းသည် URL encoding ပြီးနောက်တရုတ်မှဝင်ရောက်စွက်ဖက်မှုကိုရှောင်ရှားနိုင်သည်။

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

Substr_count () သည် Multibyte ဇာတ်ကောင် encoding အတွက်မသင့်တော်သော်လည်း၎င်းကိုအောက်ပါနည်းစနစ်များကထိရောက်စွာလျော်ကြေးပေးနိုင်သည်။

  • MB_SPLIT () split နှင့်ရေတွက်ရန်

  • PREG_MATCH_ALLALL () နှင့်အတူ / u Modifier နှင့်ကိုက်ညီရန်ပုံမှန်အသုံးအနှုန်းများကိုသုံးပါ

  • URL ကိုအပေါ် preprocessing urldecode () ကို လုပ်ဆောင်ပါ

  • Substr_Count () ကို မသုံးပါနှင့်တရုတ်, ဂျပန်နှင့်ကိုရီးယားတို့စသည့် byte စာလုံးများကိုအကြိမ်ကြိမ်ခွဲခြမ်းစိတ်ဖြာခြင်းကိုတိုက်ရိုက်ရှောင်ကြဉ်ပါ

ဤကျွမ်းကျင်မှုများကိုကျွမ်းကျင်ခြင်းသည်ဘာသာစကားမျိုးစုံ 0 ဘ်ဆိုဒ်များ ကို တီထွင်ခြင်း,