首頁  >  文章  >  後端開發  >  怎麼解決php遍歷文件亂碼的問題

怎麼解決php遍歷文件亂碼的問題

藏色散人
藏色散人原創
2020-08-15 09:50:332329瀏覽

php遍歷檔案亂碼的解決方法:先建立一個PHP範例檔案;然後把檔案編碼改成「GBK」;最後透過「read_all」方法遍歷資料夾下所有檔案即可。

怎麼解決php遍歷文件亂碼的問題

推薦:《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!=&#39;.&#39; && $fl != &#39;..&#39;  则会造成把$dir的父级目录也读取出来
            if(is_dir($temp) && $fl!=&#39;.&#39; && $fl != &#39;..&#39;){
                echo &#39;目录:&#39;.$temp.&#39;<br>&#39;;
                read_all($temp);
            }else{
                if($fl!=&#39;.&#39; && $fl != &#39;..&#39;){

                    echo &#39;文件:&#39;.$temp.&#39;<br>&#39;;
                }
            }
        }
    }
}

read_all(&#39;D:\wamp\www\test&#39;);

?>

信心滿滿打開瀏覽器

 

我屮艸薌茻,什麼鬼!

在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(&#39;GBK&#39;,&#39;utf-8&#39;,$dir.DIRECTORY_SEPARATOR.$fl);//转换成utf-8格式
            //如果不加  $fl!=&#39;.&#39; && $fl != &#39;..&#39;  则会造成把$dir的父级目录也读取出来
            if(is_dir($temp) && $fl!=&#39;.&#39; && $fl != &#39;..&#39;){
                echo &#39;目录:&#39;.$temp.&#39;<br>&#39;;
                read_all($temp);
            }else{
                if($fl!=&#39;.&#39; && $fl != &#39;..&#39;){

                    echo &#39;文件:&#39;.$temp.&#39;<br>&#39;;
                }
            }
        }
    }
}

read_all(&#39;D:\wamp\www\test&#39;);

?>

把第17行程式碼加了iconv,這次一定沒問題了

怎麼解決php遍歷文件亂碼的問題了!下面的文件沒有被讀取出來!

 單獨測試了一下

<?php

$dir=&#39;D:\wamp\www\test\test_dir\子目录&#39;;
var_dump(is_dir($dir));

?>

在utf8編碼格式下真的不行,

把檔案編碼改成GBK就可以了

 最後不得已,只能把檔案編碼格式改成gbk,顯示效果如下:但是在UTF8編碼格式下還是沒有找到好的解決方法,希望有處理過這個問題的朋友給建議,麼麼噠! !

以上是怎麼解決php遍歷文件亂碼的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn