PHP ၏ Zip_Read () function ကို အသုံးပြု. Zip ဖိုင်များကိုဖတ်သည့်အခါတရုတ်ဖိုင်အမည်ကိုကျောက်တုံးများပြသသည့်ပြ problem နာကိုသင်မကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ ၎င်းသည်အဓိကအားဖြင့် ZIP ဖိုင်များရှိဖိုင်အမည်များသည် CP437 encoding ဖြစ်သည်။ ပုံမှန်အားဖြင့်တရုတ်ပတ် 0 န်းကျင်သည် UTF-8 encoding ကို အသုံးပြု. စာဖတ်စဉ်တွင်မတိုက်ဆိုင်မှုများနှင့်အမှိုက်များနှင့်အမှိုက်များနှင့်အမှိုက်များကိုဖြစ်ပေါ်စေသည်။
ဤဆောင်းပါးသည်ဤပြ problem နာကိုမည်သို့ဖြေရှင်းရမည်ကိုအသေးစိတ်ရှင်းပြပြီးတရုတ်ဖိုင်အမည်ကို Zip_read () ကိုဖတ်နိုင်သည်။
ZIP format တိတော်တစ်ခုတွင်ဖိုင်အမည်များကို default encoding သည် IBM PC ၏ CP4337 encoding ဖြစ်သည်။ သို့သော်တရုတ်ဖိုင်အမည်များသည် GBK သို့မဟုတ် UTF-8 ကို အသုံးပြု. မကြာခဏ encoded နေကြသည်။ PHP သည် encoding ကိုမှန်ကန်စွာပြောင်းလဲခြင်းမပြုပါကစာဖတ်ခြင်းကိုဖတ်သည့်အခါ၎င်းသည် barbled code ကိုဖြစ်စေနိုင်သည်။
PHP ၏ဇာတိ zip_read () function သည်အလိုအလျှောက် encode လုပ်ပြီးကိုယ်တိုင်ပြုလုပ်ရန်လိုအပ်သည်။
မူရင်းဖိုင်အမည်ကိုရယူပါ (များသောအားဖြင့် CP4337 encoding) ကိုရယူပါ။
Filename ကို CP437 မှ CP437 မှ UTF-8 သို့မဟုတ် GBK သို့ပြောင်းပါ
ကူးပြောင်းဖိုင်အမျိုးအစား output ကို output
အကယ်. ZIP ဖိုင်တွင်ဖိုင်အမည်ကို UTF-8 encoding ဖြင့်မှတ်သားထားပါက UTF-8 decoding ကိုပထမ ဦး စွာအသုံးပြုရန်လိုအပ်သည်။
<?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>';
?>
အကယ်. သင်၏ Zip file file file name သည် GBK encoded ဖြစ်ပါက MB_ConVert_encoding ($ အမည်, utf-8 ',' gbk ') ကို တိုက်ရိုက်အသုံးပြုနိုင်သည်။
PHP7.2 + + accoded file name ကိုတိုက်ရိုက်ရယူခြင်းနှင့်ပိုမိုတည်ငြိမ်သည်။
မှတ်ဉာဏ်ယိုစိမ့်မှုကိုရှောင်ရှားရန် Zip ဖိုင်များကိုဖတ်ရှုသည့်အခါအရင်းအမြစ်ပိတ်ခြင်းကိုအာရုံစိုက်ပါ။
<?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 နာများစွာကိုရှောင်ရှားနိုင်သည်။