php遍歷檔案亂碼的解決方法:先建立一個PHP範例檔案;然後把檔案編碼改成「GBK」;最後透過「read_all」方法遍歷資料夾下所有檔案即可。
推薦:《PHP影片教學》
最近面試深受打擊,回到河南老家一年多生了個娃回來發現自己已經跟不上IT產業的發展腳步
面試過程中發現很多公司的筆試題裡面都有這題,也是工作中常用到的功能。
這還不是a piece of cake麼
<?php /* * 遍历文件夹下所有文件 * * 作者:郭猛 * 邮箱:martin.guo@qq.com * */ function read_all ($dir){ if(!is_dir($dir)) return false; $handle = opendir($dir); if($handle){ while(($fl = readdir($handle)) !== false){ $temp = $dir.DIRECTORY_SEPARATOR.$fl; //如果不加 $fl!='.' && $fl != '..' 则会造成把$dir的父级目录也读取出来 if(is_dir($temp) && $fl!='.' && $fl != '..'){ echo '目录:'.$temp.'<br>'; read_all($temp); }else{ if($fl!='.' && $fl != '..'){ echo '文件:'.$temp.'<br>'; } } } } } read_all('D:\wamp\www\test'); ?>
信心滿滿打開瀏覽器
我屮艸薌茻,什麼鬼!
在windows環境下,檔案編碼是UTF8,當目錄中有中文目錄,會顯示亂碼! !
此時我的檔案編碼和瀏覽器顯示編碼都是utf-8,我就想到windows的目錄名稱是GBK,那就用iconv轉換一下編碼格式好了,改動了一下代碼,如下第17行:
<?php /* * 遍历文件夹下所有文件 * * 作者:郭猛 * 邮箱:martin.guo@qq.com * */ function read_all ($dir){ if(!is_dir($dir)) return false; $handle = opendir($dir); if($handle){ while(($fl = readdir($handle)) !== false){ $temp = iconv('GBK','utf-8',$dir.DIRECTORY_SEPARATOR.$fl);//转换成utf-8格式 //如果不加 $fl!='.' && $fl != '..' 则会造成把$dir的父级目录也读取出来 if(is_dir($temp) && $fl!='.' && $fl != '..'){ echo '目录:'.$temp.'<br>'; read_all($temp); }else{ if($fl!='.' && $fl != '..'){ echo '文件:'.$temp.'<br>'; } } } } } read_all('D:\wamp\www\test'); ?>
把第17行程式碼加了iconv,這次一定沒問題了
檔了!下面的文件沒有被讀取出來!
單獨測試了一下<?php $dir='D:\wamp\www\test\test_dir\子目录'; var_dump(is_dir($dir)); ?>在utf8編碼格式下真的不行, 把檔案編碼改成GBK就可以了 最後不得已,只能把檔案編碼格式改成gbk,顯示效果如下:但是在UTF8編碼格式下還是沒有找到好的解決方法,希望有處理過這個問題的朋友給建議,麼麼噠! !
以上是怎麼解決php遍歷文件亂碼的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!