လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> CSV ဖိုင်များကိုဖတ်ရန် FetCSV ကိုအသုံးပြုပါကဘာလုပ်ရမည်နည်း။ coding ပြ problems နာများအတွက်အသေးစိတ်ဖြေရှင်းချက်

CSV ဖိုင်များကိုဖတ်ရန် FetCSV ကိုအသုံးပြုပါကဘာလုပ်ရမည်နည်း။ coding ပြ problems နာများအတွက်အသေးစိတ်ဖြေရှင်းချက်

gitbox 2025-06-08

1 ။ fgetcsv ကို သုံးတဲ့အခါအမှိုက်ပုံကုဒ်ဘာကြောင့်ပေါ်လာတာလဲ။

FgetCsv () သည် PHP မှ PHP မှ CSV ဖိုင်များကိုအတန်းဖြင့်ဖတ်ရန်နှင့်ဒေတာတစ်ခုစီကိုခင်းကျင်းရန်နေရာတစ်ခုအဖြစ်သို့ပြန်ပို့သည်။ သို့သော်၎င်းသည်အလိုအလျောက် transcode မသွားပါ။ GBK သို့မဟုတ် Big5 encoding တွင်သိမ်းဆည်းထားသောဖိုင်ကိုသင်ဖတ်ရှုရန်ကြိုးစားပါကသင်၏ PHP ပတ်ဝန်းကျင်သို့မဟုတ်ဝက်ဘ်စာမျက်နှာ output သည် UTF-8 ဖြစ်သည်။ ထို့နောက် output သည်အမှိုက်များပေါ်လာလိမ့်မည်။


2 ။ Barbled Code ၏ပြ problem နာကိုဖြေရှင်းရန်အဓိကအားဖြင့် Transcoding

ကွန်ရက်ဆောင်ပြ problem နာကိုဖြေရှင်းရန်ကျွန်ုပ်တို့သည်ဒေတာတစ်ခုစီကိုစာဖတ်ပြီးနောက်မူရင်း encoding (များသောအားဖြင့် UTF-8) မှပစ်မှတ် encoding နှင့် target encoding သို့ပြောင်းရန်လိုအပ်သည်။ ၎င်းကို PHP ၏ MB_ConVert_encoding () သို့မဟုတ် iconv () လုပ်ဆောင်ချက်များကိုဖြင့်ပြုလုပ်နိုင်သည်။


3 ။ ပြီးပြည့်စုံသောကုဒ်များဥပမာ

ကျွန်ုပ်တို့တွင် UTF-8 တွင်မှန်ကန်စွာပြသရန်အတွက် GBK-encoded CSV ဖိုင်ရှိသည်ဆိုပါစို့, အောက်ပါကုဒ်ကိုသုံးနိုင်သည်။

<Code> <? PHP

$ filename = "data.csv"; // CSV ဖိုင်သည် GBK encoded ဖြစ်သည်ဟုယူဆပါ
$ လက်ကိုင် = fopen ($ filename, r ");

($ လက်ကိုင်! == fiss) လျှင်
စဉ် (($ ဒေတာ = fgetcsv)! == fiss) {
// ကော်လံတစ်ခုချင်းစီကို GBK မှ UTF-8 သို့ပြောင်းပါ
foreach ($ ဒေတာ As & $ field) {
$ field = mb_convertert_encoding ($ field, "utf-8", "gbk");
}
unset ($ လယ်ကွင်း); // ကိုးကားပြ issues နာများကိုရှောင်ကြဉ်ပါ

     print_r($data); // transcoded အကြောင်းအရာ output ကို
}
fclose($handle);

} အခြား
ECHO "ဖိုင်ကိုဖွင့ ်. မရပါ။ $ filename";
}

>
</ code>


4 ။ အလိုအလျောက်ထောက်လှမ်းခြင်းနှင့် coding (အဆင့်မြင့်အလေ့အကျင့်)

ဖိုင်၏မူလ encoding ကိုသင်မသေချာပါက MB_Detect_encoding () ကို အလိုအလျောက်စစ်ဆေးရန်သင်အသုံးပြုနိုင်သည်။

<Code> <? PHP

$ filename = "data.csv";
$ လက်ကိုင် = fopen ($ filename, r ");

($ လက်ကိုင်! == fiss) လျှင်
$ firstline = fgets ($ လက်ကိုင်);
rewind ($ လက်ကိုင်); // ပထမစာကြောင်းကိုဖတ်ပြီးနောက် Pointer သည်ဖိုင်၏အစသို့ပြန်သွားသည်
$ encoding = mb_detect_encoding ($ firllence, "Utf-8", "Big5", "Big5", "SJIs"],
လျှင် (! $ encoding) {
$ encoding = "gbk"; // ၎င်းကိုရှာဖွေတွေ့ရှိလို့မရဘူးဆိုရင် GBK ကိုပုံမှန်အားဖြင့်အသုံးပြုသည်
}

 while (($data = fgetcsv($handle)) !== false) {
    foreach ($data as &$field) {
        $field = mb_convert_encoding($field, "UTF-8", $encoding);
    }
    unset($field);
    print_r($data);
}
fclose($handle);

} အခြား
ECHO "ဖိုင်ကိုဖွင့ ်. မရပါ";
}

>
</ code>


5 ။ CSV ကို browser မှတဆင့်တင်ထားလျှင်ကော။

အသုံးပြုသူမှတင်ထားသော CSV ဖိုင်သည်မတူညီသော operating systems (Windows, Mac, Linux) မှလာနိုင်သည်။ သို့မဟုတ်၎င်းသည်မတူညီသောဆော့ဖ်ဝဲများ (Excel, WPS) မှကယ်တင်ခြင်းသို့ရောက်နိုင်သည်။ upload လုပ်ပြီးနောက် encoding ကိုတညီတညွတ်တည်းဖြစ်အောင်လုပ်ရန်အကြံပြုသည်, ထို့နောက်၎င်းကို fgetcsv () ဖြင့်ဖတ်ပါ။

uploaded CSV ဖိုင်ကိုယာယီဖိုင်တစ်ခုအဖြစ်သိမ်းဆည်းခြင်းနှင့်စည်းလုံးမှုအပြောင်းအလဲအတွက်အထက်ပါအလိုအလျောက်ရှာဖွေရေး + transcoding method ကို အသုံးပြု. သိမ်းဆည်းထားသော CSV ဖိုင်ကိုသိမ်းဆည်းရန်သင်စဉ်းစားနိုင်သည်။

<Code> <? PHP

if (isset($_FILES['csvfile']) && $_FILES['csvfile']['error'] === UPLOAD_ERR_OK) {
$ tmpfile = $ _files ['CSVFILE'] ['TMP_NAME'];
$ လက်ကိုင် = fopen ($ tmpfile, "r");

 if ($handle !== false) {
    $firstLine = fgets($handle);
    rewind($handle);
    $encoding = mb_detect_encoding($firstLine, ["GBK", "UTF-8", "BIG5", "SJIS"], true);
    if (!$encoding) {
        $encoding = "GBK";
    }

    while (($data = fgetcsv($handle)) !== false) {
        foreach ($data as &$field) {
            $field = mb_convert_encoding($field, "UTF-8", $encoding);
        }
        unset($field);
        print_r($data);
    }
    fclose($handle);
} else {
    echo "တင်ထားသောဖိုင်များကိုဖတ်။ မရပါ";
}

} အခြား
Echo "upload မအောင်မြင်ပါသို့မဟုတ်ဖိုင်မမှန်ကန်ပါ";
}

>
</ code>