လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Sprintf နှင့် MB_Strlen ၏မလျော်ကန်သောအသုံးပြုမှု () output အမှားများကိုဖြစ်ပေါ်စေသည်

Sprintf နှင့် MB_Strlen ၏မလျော်ကန်သောအသုံးပြုမှု () output အမှားများကိုဖြစ်ပေါ်စေသည်

gitbox 2025-04-28

PHP ပရိုဂရမ်, Sprintf () နှင့် MB_strinlen () တွင်အသုံးပြုသောအသုံးပြုမှုနှစ်ခုသည်အလွန်အသုံးများသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။ ၎င်းသည် output ကို format လုပ်ပြီး Multibyte string ကိုအသီးသီးရရှိရန်အသုံးပြုသည်။ သို့သော်အမှန်တကယ်အသုံးပြုမှုတွင် developer များသည်အထူးသဖြင့် byte multi-byte အက္ခရာများ (တရုတ်ကဲ့သို့) နှင့်ဆက်ဆံရာတွင်ဤလုပ်ငန်းနှစ်ခုကိုအသုံးမပြုပါက developer များကဤလုပ်ငန်းနှစ်ခုကိုအသုံးမပြုနိုင်ပါက, ဤဆောင်းပါးသည်ဤပြ problems နာများ၏အကြောင်းရင်းများကိုစူးစမ်းလေ့လာပြီးဖြေရှင်းနည်းများပေးလိမ့်မည်။

1 ။ Sprintf () function ကိုအသုံးပြုခြင်းအတွက်ပြ issues နာများ

Sprintf () function ကိုပေးထားသောပုံစံကို အခြေခံ. ကြိုးများကိုထုတ်လုပ်ရန်အသုံးပြုသည်။ ဤလုပ်ဆောင်ချက်ကိုသင်အသုံးပြုသောအခါ၎င်းသည်သင်သတ်မှတ်သည့်ပုံစံနှင့်အညီ variable ကို string သို့တန်ဖိုးကိုထည့်သည်။ ဘုံအမှားတစ်ခုမှာ format ချထားသော string ကိုမမှန်ကန်ကြောင်းသို့မဟုတ်အထူးသဖြင့် byte multi-byte အက္ခရာများ (တရုတ်, ဂျပန်စသည်တို့ကို)

ဥပမာ -

 $name = "Zhang San";
$age = 25;
echo sprintf("နံမယ်: %s, အသက်အရွယ်: %d", $name, $age);

အထက်ပါကုဒ်သည်မှန်ကန်စွာ output လုပ်သင့်သည် -

 နံမယ်: Zhang San, အသက်အရွယ်: 25

သို့သော်သင်သည် string ကို format ချခြင်းသို့မဟုတ် string ကိုယ်နှိုက်တွင်မှားယွင်းသောဇာတ်ကောင် encoding ကိုမတော်တဆသုံးပါက (string ကိုယ်နှိုက်တွင်မမှန်ကန်သောပုံစံသင်္ကေတများပါ 0 င်သည်။

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

  1. အက်ခရာဇာတ်ကောင်များနှင့်ကိုက်ညီမှုကိုသေချာစေရန် % s , % s ကဲ့သို့သောစာလုံးများကိုမှန်ကန်စွာပြုလုပ်ပါ။

  2. စာလုံးစရိုက်ကိုထည့်သွင်းစဉ်းစားပါ ။ Multibyte ဇာတ်ကောင်များကိုလုပ်ဆောင်သောအခါ strings ၏ encoding သည်တသမတ်တည်းဖြစ်ကြောင်းသေချာစေရန်ကြိုးစားပါ။ အထူးသဖြင့် UTF-8 နှင့်အခြားဇာတ်ကောင်အစုံများအကြားပြောင်းလဲသည့်အခါ Sprintf () သည် Multibyte စာလုံးများကိုမှန်ကန်စွာကိုင်တွယ်နိုင်ပြီးမတိုက်ဆိုင်သည့် output ကိုဖြစ်ပေါ်စေသည်။ coding ကိုက်ညီမှုရှိစေရန် MB_ConVert_encoding () ကိုသုံးပါ။

2 ။ MB_strlen () function ကိုအသုံးပြုခြင်းနှင့်အတူပြနာများ

MB_Strlen () သည် Multibyte ကြိုးများအတွက်အရှည်တွက်ချက်မှုလုပ်ငန်းဖြစ်သည်။ ၎င်းကိုများသောအားဖြင့်တရုတ်, ဂျပန်နှင့်အခြားအာဆီယံမဟုတ်သောဇာတ်ကောင်များပါ 0 င်သည့်ကြိုးများကိုပြုလုပ်လေ့ရှိသည်။ Multibyte ဇာတ်ကောင်များသည်ပုံမှန် strlen () function ကိုအသုံးပြုခြင်းသည်တစ်ခုတည်းသော byte အက္ခရာများနှင့်ကွဲပြားသောကြောင့်မမှန်ကန်ပါ။ ဤဖြစ်ရပ်များတွင် MB_strinlen () သည်အလွန်အရေးကြီးသည်။

ဥပမာ -

 $text = "မင်္ဂလာပါ,ကမ်ာဘ";
echo mb_strlen($text, 'UTF-8');

output ကိုဖြစ်လိမ့်မည်:

 6

သို့သော်, အကယ်. သင်သည်မှန်ကန်သောဇာတ်ကောင်ကို encoding encoding ကိုမသတ်မှတ်ပါကသို့မဟုတ်အပြောင်းအလဲနဲ့မတူကွဲပြားသောဇာတ်ကောင်အစုံ၏ကြိုးကိုမရောနှောပါက MB_strinlen () သည် မမှန်ကန်ပါကမမှန်ကန်သောရလဒ်ကိုပြန်ပေးနိုင်သည်။

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

  1. Encaper Encoding ကိုခွဲခြားသတ်မှတ် - MB_strinlen's အမှားများကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများကိုရှောင်ရှားရန် MB_strinlen ( '' ) ဟုခေါ်သည့်အခါမှန်ကန်သောဇာတ်ကောင်သတ်မှတ်ချက်ကိုအမြဲတမ်းသတ်မှတ်ပါ။

  2. CHARTS SESS ကိုက်ညီမှုကိုစစ်ဆေးပါ ။ ကြိုးများပါ 0 င်သည့်စစ်ဆင်ရေးအားလုံးသည်တူညီသောဇာတ်ကောင် encoding ကိုအသုံးပြုကြောင်းသေချာအောင်လုပ်ပါ။ အကယ်. သင်၏လျှောက်လွှာတွင်စာလုံးပေါင်းစုံစာလုံးပေါင်းမျိုးစုံကိုအသုံးပြုပါက၎င်းတို့ကို string ကိုမကိုင်တွယ်ခင် encoding တစ်ခုထဲသို့ပြောင်းလဲရန်အကောင်းဆုံးဖြစ်သည်။

3 ။ မကြာခဏမေးလေ့ရှိတဲ့မေးခွန်းများနှင့်ဖြေရှင်းနည်းများ

ပြ Proble နာ 1: Multi-byte ဇာတ်ကောင် output အမှားများကိုဖြစ်ပေါ်စေသည်

အကယ်. သင်သည် sprintf () ကို သုံး. (UTF-8) ကဲ့သို့သော Multibyte ဇာတ်ကောင် set ကိုသုံးပါက, ဇာတ်ကောင်များ၏ byte အရှည်ကိုထည့်သွင်းစဉ်းစားခြင်းမရှိဘဲ၎င်းသည် output မတိုက်ဆိုင်မှုဖြစ်စေနိုင်သည်။ ဥပမာအားဖြင့်, string ကို format ချသောအခါအချို့သောဇာတ်ကောင်များကိုရှေ့နောက်မညီစာဝှက်ခြင်းကြောင့်မှားယွင်းစွာပုံစံချနိုင်သည်။

ဖြေရှင်းချက် -

  • strings ကို format ချသောအခါ strlen () ကိုအသုံးပြုမယ့်အစားမှန်ကန်သော string အရှည်ရရှိရန် mb_strlen () ကိုအသုံးပြုပါ။

  • strings အားလုံးတသမတ်တည်း encodate နေကြသည်သေချာစေရန် MB_convert_encoding () function ကိုသုံးပါ။

မေးခွန်း 2 - ကိုက်ညီမှုမရှိသောဇာတ်ကောင် encoding ပုံမှန်မဟုတ်သောရလဒ်များ

PHP တွင် string များတူးဖော်သည့်အခါအထူးသဖြင့်၎င်း တွင် ဒေတာဗားရှင်းလုပ်ငန်းများပါ 0 င်သည့်အခါပြင်ပ APIs မှအချက်အလက်များပါ 0 င် သောအခါ ,

ဖြေရှင်းချက် -

  • application ၏ဇာတ်ကောင် encoding ကို encouring, string string အားလုံး encoding အောက်မှာဖျော်ဖြေဖို့သေချာစေပါ။

  • Database နှင့် Extramase adi data data များကို processing သည့်အခါကြိုးအားလုံးကိုစည်းလုံးညီညွှတ်သော encoding သို့ပြောင်းလဲရန် MB_ConVert_encoding () ကိုသုံးပါ။

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

PHP ပရိုဂရမ်, Sprintf () နှင့် MB_strinlen () တွင်အလွန်အစွမ်းထက်သောလုပ်ဆောင်ချက်နှစ်ခုရှိလျှင်, ဤပြ problems နာများကိုရှောင်ရှားရန်ကျွန်ုပ်တို့လိုအပ်သည်။

  • Sprintf () ကိုအသုံးပြုသောအခါ,

  • MB_strinlen () ကို အသုံးပြုသောအခါမှန်ကန်သောဇာတ်ကောင် encoding ကိုသေချာစွာဖော်ပြပြီးဇာတ်ကောင်အစုံ၏ရှေ့နောက်ညီညွတ်မှုကိုစစ်ဆေးပါ။

ဤအစီအမံများမှတဆင့်ပရိုဂရမ်တွင် string operation သည်ပိုမိုယုံကြည်စိတ်ချရပြီး output mismatch ကိုရှောင်ရှားရန်သေချာစေနိုင်သည်။