လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> zip_read () ကို အသုံးပြု. Zip ဖိုင်များကိုဖတ်သည့်အခါတရုတ်စာဝှက်ခြင်းပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်နည်း။

zip_read () ကို အသုံးပြု. Zip ဖိုင်များကိုဖတ်သည့်အခါတရုတ်စာဝှက်ခြင်းပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်နည်း။

M66 2025-06-12

PHP ၏ Zip_Read () function ကို အသုံးပြု. Zip ဖိုင်များကိုဖတ်သည့်အခါတရုတ်ဖိုင်အမည်ကိုကျောက်တုံးများပြသသည့်ပြ problem နာကိုသင်မကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ ၎င်းသည်အဓိကအားဖြင့် ZIP ဖိုင်များရှိဖိုင်အမည်များသည် CP437 encoding ဖြစ်သည်။ ပုံမှန်အားဖြင့်တရုတ်ပတ် 0 န်းကျင်သည် UTF-8 encoding ကို အသုံးပြု. စာဖတ်စဉ်တွင်မတိုက်ဆိုင်မှုများနှင့်အမှိုက်များနှင့်အမှိုက်များနှင့်အမှိုက်များကိုဖြစ်ပေါ်စေသည်။

ဤဆောင်းပါးသည်ဤပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်ကိုအသေးစိတ်ရှင်းပြပြီးတရုတ်ဖိုင်အမည်ကို Zip_read () ကိုဖတ်နိုင်သည်။

1 ။ carbled ကုဒ်များအတွက်အကြောင်းပြချက်

ZIP format တိတော်တစ်ခုတွင်ဖိုင်အမည်များကို default encoding သည် IBM PC ၏ CP4337 encoding ဖြစ်သည်။ သို့သော်တရုတ်ဖိုင်အမည်များသည် GBK သို့မဟုတ် UTF-8 ကို အသုံးပြု. မကြာခဏ encoded နေကြသည်။ PHP သည် encoding ကိုမှန်ကန်စွာပြောင်းလဲခြင်းမပြုပါကစာဖတ်ခြင်းကိုဖတ်သည့်အခါ၎င်းသည် barbled code ကိုဖြစ်စေနိုင်သည်။

PHP ၏ဇာတိ zip_read () function သည်အလိုအလျှောက် encode လုပ်ပြီးကိုယ်တိုင်ပြုလုပ်ရန်လိုအပ်သည်။

2 ။ ဖြေရှင်းနည်းများ

  • မူရင်းဖိုင်အမည်ကိုရယူပါ (များသောအားဖြင့် CP4337 encoding) ကိုရယူပါ။

  • Filename ကို CP437 မှ CP437 မှ UTF-8 သို့မဟုတ် GBK သို့ပြောင်းပါ

  • ကူးပြောင်းဖိုင်အမျိုးအစား output ကို output

အကယ်. ZIP ဖိုင်တွင်ဖိုင်အမည်ကို UTF-8 encoding ဖြင့်မှတ်သားထားပါက UTF-8 decoding ကိုပထမ ဦး စွာအသုံးပြုရန်လိုအပ်သည်။

3 ။ Code ဥပမာ

 <?php
$zipFile = 'path/to/your/zipfile.zip'; // ZIP ဖိုင်လမ်းကြောင်း

$zip = zip_open($zipFile);
if ($zip) {
    while ($zipEntry = zip_read($zip)) {
        // ဖိုင်အမည်ကိုရယူပါ(မူရင်း encoding)
        $name = zip_entry_name($zipEntry);

        // ဟုတ်မဟုတ်ကို detect လုပ်ပါ UTF-8 encoding အမှတ်အသား
        $isUtf8 = false;
        // ဖိုင်အမျိုးအစားသက်တမ်းရှိဟုတ်မဟုတ်ဆုံးဖြတ်ရန်ရိုးရှင်းသောနည်းလမ်းဖြစ်သည် UTF-8 ကုဒ်
        if (mb_check_encoding($name, 'UTF-8')) {
            $isUtf8 = true;
        }

        if (!$isUtf8) {
            // 假设မူရင်း encoding是 CP437,ကူးပြောင်း GBK ကူးပြောင်း UTF-8
            $name = mb_convert_encoding($name, 'UTF-8', 'CP437');
        }

        echo "ဖိုင်နာမည်:<code>$name</code><br>\n";
    }
    zip_close($zip);
} else {
    echo "ဖွင့်လို့မရဘူး ZIP စာချုပ်စာတမ်း。";
}
?>

အထက်ပါကုဒ်တွင် <code> tag ရှိဖိုင်အမည်> tag တွင် tag ကို UTF-8 encoding သို့ပြောင်းလဲခြင်း, တရုတ်၏ garbled code ကိုရှောင်ရှားသည်။

ဖိုင်အမည်တွင် URL တစ်ခုထည့်ရန်လိုအပ်ပါက URL domain name ကို M66.net နှင့်အစားထိုးရန်လိုအပ်ပါကအစားထိုးပါ။

 <?php
echo '<code>http://m66.net/path/to/resource</code>';
?>

4 ။ အခြားကြိုတင်ကာကွယ်မှုများ

  • အကယ်. သင်၏ Zip file file file name သည် GBK encoded ဖြစ်ပါက MB_ConVert_encoding ($ အမည်, utf-8 ',' gbk ') ကို တိုက်ရိုက်အသုံးပြုနိုင်သည်။

  • PHP7.2 + + accoded file name ကိုတိုက်ရိုက်ရယူခြင်းနှင့်ပိုမိုတည်ငြိမ်သည်။

  • မှတ်ဉာဏ်ယိုစိမ့်မှုကိုရှောင်ရှားရန် Zip ဖိုင်များကိုဖတ်ရှုသည့်အခါအရင်းအမြစ်ပိတ်ခြင်းကိုအာရုံစိုက်ပါ။

5 ။ Ziparchive ကိုအသုံးပြုခြင်းဥပမာ (အကြံပြုထားသည်)

 <?php
$zip = new ZipArchive();
if ($zip->open('path/to/your/zipfile.zip') === TRUE) {
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $name = $zip->getNameIndex($i);

        // 这里假设ဖိုင်နာမည်已经是 UTF-8
        echo "ဖိုင်နာမည်:<code>$name</code><br>\n";
    }
    $zip->close();
} else {
    echo "ဖွင့်လို့မရဘူး ZIP စာချုပ်စာတမ်း。";
}
?>

ဤနည်းအားဖြင့် coding ပြ problems နာများစွာကိုရှောင်ရှားနိုင်သည်။