ဘာသာစကားမျိုးစုံသောစာသားပြုပြင်ခြင်းအတွက် PHP ကိုအသုံးပြုသောအခါ iconv_strrpos သည် string တစ်ခုတွင်ဇာတ်ကောင်တစ် ဦး ၏နောက်ဆုံးဖြစ်ပျက်မှုကိုရှာဖွေရန်ဘုံ function တစ်ခုဖြစ်သည်။ သို့သော်အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်, 0 င်လာသည့် string encoding သည်သတ်မှတ်ထားသော encoding နှင့်မကိုက်ညီပါက iCONV_STRRPOS သည် "အမှား" အနေအထားကိုပြန်ပို့နိုင်သည်သို့မဟုတ် မှားယွင်းစွာ တုံ့ပြန်နိုင်သည်။ ဤပြ problem နာသည်အထူးသဖြင့်မျိုးစပ်သော coding သို့မဟုတ် ununrum on coding လုပ်သည့်အခြေအနေတွင်ပြုလုပ်ရန်ခက်ခဲသည်။
ဤဆောင်းပါးသည်ဤပြ problem နာကိုအဘယ်ကြောင့်တွေ့ရှိရပြီးယုံကြည်စိတ်ချရသောဖြေရှင်းနည်းပေးရန်အကြောင်းလေ့လာသုံးသပ်လိမ့်မည်။
IcONV_STRPOX ၏ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
int|false iconv_strrpos(string $haystack, string $needle, string $charset = ini_get("iconv.internal_encoding"))
သတ်မှတ်ထားသော charset အပေါ် အခြေခံ. မြက်ခင်းပြင် ၌ (အက္ခရာများတွင်) တွင် (ဇာတ်ကောင်များတွင်) ၌ အပ် ၏နောက်ဆုံးဖြစ်ပျက်မှုကိုပြန်လည်ရောက်ရှိစေသည်။ မှတ်ချက် - ၎င်းသည် byte offset မဟုတ်ဘဲဇာတ်ကောင်အနေအထားဖြစ်သည်။
ဥပမာအားဖြင့်:
$str = "မင်္ဂလာပါ,ကမ်ာဘ!";
$pos = iconv_strrpos($str, "နယ်နိမိတ်", "UTF-8");
echo $pos; // ပုံမှန် output ကို 4
$ str သည်အမှန်တကယ် GBK encoding တွင် string တစ်ခုဖြစ်ပြီးသင်ဖြတ်သန်းသွားသော encoding encoding encoding encoding သည် "utf-8" ဖြစ်သည်။ ICONV_STRRPOS သည် GBK encoding content ကို UTF-8 အရသိရသည်။
ခွဲခြမ်းစိတ်ဖြာမှု မအောင်မြင် ပါ,
Parsing သည်အောင်မြင်သော်လည်း ETF-8 သည်ဇာတ်ကောင်တစ် ဦး လျှင် 1 ~ 4 bytes 1 ကို 1 မှ 4 ဒြပ်စင်များဖြင့်ပြုလုပ်သည်။
ဥပမာအားဖြင့်:
$str = file_get_contents("http://gitbox.net/data/sample-gbk.txt"); // မုချ GBK ကုဒ်
$pos = iconv_strrpos($str, "နယ်နိမိတ်", "UTF-8");
var_dump($pos); // ပြန်လာရန်ဖြစ်နိုင်သည် false သို့မဟုတ်မှားယွင်းသောအနေအထား
ICONV စီးရီးလုပ်ဆောင်ချက်များသည်စာလုံးအလုံးစုံပြောင်းလဲခြင်းစာကြည့်တိုက်၏အောက်ခြေတွင်အလုပ်လုပ်သည်။ ဇာတ်ကောင် encoding ကိုက်ညီမှုသည်
iCONV_STRRPOS သည် byte sequence ကိုမှန်ကန်သောစာလုံးများအဖြစ်ခွဲခြမ်းစိတ်ဖြာရန်ကြိုးစားလိမ့်မည်။
တရားမ 0 င ် သောအစီအစဉ်များကိုဖြစ်ပေါ်ပါ
အကယ်. တစ်စိတ်တစ်ပိုင်းတရားဝင် (သို့မဟုတ်သဟဇာတသဟဇာတစာလုံးများ) ပါကအမှားအယွင်းများခွဲခြမ်းစိတ်ဖြာပြီးနောက်ပြန်လည်နေရာချထားသည့်နေရာကိုဇာတ်ကောင်စီးပေါ် မူတည်. တွက်ချက်သည်။
ဒါကအခြေခံအကျဆုံးဖြေရှင်းနည်းပါ။ iCONV_STRRPOS ကို မခေါ်မီ string သည်သတ်မှတ်ထားသော encoding ဖြစ်သည်ကိုသေချာအောင်လုပ်ရမည်။
function ensure_encoding(string $str, string $from, string $to = 'UTF-8'): string {
if (!mb_check_encoding($str, $to)) {
return iconv($from, $to . "//IGNORE", $str);
}
return $str;
}
$str = file_get_contents("http://gitbox.net/data/sample-gbk.txt");
$str = ensure_encoding($str, "GBK", "UTF-8");
$pos = iconv_strrpos($str, "နယ်နိမိတ်", "UTF-8");
echo $pos;
Multibyte ပတ်ဝန်းကျင်တွင် MB_Strropos သည် Encoding ကိုပိုမိုတည်ငြိမ်စွာကိုင်တွယ်သောကြောင့် MB_Strpos သည်ပိုမိုလုံခြုံသောရွေးချယ်မှုဖြစ်သည်။
mb_internal_encoding("UTF-8");
$pos = mb_strrpos($str, "နယ်နိမိတ်");
တစ်ချိန်တည်းမှာပင် MB_Strpos သည် parsing များအတွက် MB_Trinternal_encoding ကို တင်းကြပ်စွာလိုက်နာလိမ့်မည်။
အကြောင်းအရာရင်းမြစ်များအားလုံး (ဒေတာဘေ့စ်များ, ဥပမာအားဖြင့်, ဖိုင်တစ်ခုကိုဖတ်သည့်အခါ encoding ကိုသင်အတင်းဖိအားပေးနိုင်သည်။
$str = file_get_contents("http://gitbox.net/data/sample-utf8.txt");
// နေရင် GBK ဖိုင်စနစ်,ကိုယ်တိုင်ပြောင်းလဲ
$str = iconv("GBK", "UTF-8//IGNORE", $str);
IcONV_STRPOS သည် မှားယွင်းသောမတိုက်ဆိုင်သည့်မတိုက်ဆိုင်သည့်မတိုက်ဆိုင်မှုတွင်မတည်မငြိမ်ဖြစ်နေသည်။ ဒါကိုရှောင်ရှားရန်
String ၏အမှန်တကယ် encoding သည်ဝင်လာသော charset နှင့်ကိုက်ညီကြောင်းသေချာပါစေ။
ဇာတ်ကောင်အနေအထားအပြောင်းအလဲအတွက် MB_Strropos ကို အသုံးပြု. ဦး စားပေးထားသည်။
စနစ်၏အတွင်းပိုင်း encoding ကိုတသမတ်တည်းထားရှိပါ (UTF-8 အကြံပြု);
encodency ရှေ့နောက်ညီညွတ်မှုကိုအတည်ပြုပြီးသည်နှင့် iconv_strpos သည် ယုံကြည်စိတ်ချရနိုင်သော်လည်းအချက်အလက်အရင်းအမြစ်ကိုသင်လုံလောက်သောထိန်းချုပ်မှုနှင့်နားလည်မှုရှိလျှင်သာဖြစ်သည်။ ဒီလိုမှမဟုတ်ရင် MB_ * စီးရီး function ကိုအသုံးပြုပြီးလုံခြုံမှုရှိလိမ့်မယ်။