php透過變通方法檢測系統的資料夾路徑編碼

WBOY
發布: 2016-08-08 09:23:01
原創
974 人瀏覽過

最近在透過php來寫一個類似ftp的的web-ftp平台;
需要兼容linux和window的路徑訪問;
過程中發現window與linux使用的路徑編碼是不一樣的,比如linux好像是utf-8, window卻是gbk;
php的編碼是utf-8,如果路徑中有中文,統一使用utf-8編碼來存取路徑,就會出現像file_exists這類fs方法出現無法存取情況;
因為路徑不存在,原因就是utf-8按照gbk的格式來解析路徑編碼時,肯定是中文變成不的字符了;就出現路徑不存在而出錯;
這時就需要自動的檢測當前系統的編碼,
在google上找了一下,沒找到有效的php內建的偵測系統編碼的方法;
想了一下,我使用以下方案來解決:目前在linux和window下測試是正確的;
```php
    
    //把utf8編碼轉換成目前系統編碼
    protected static function _toOsCode($str, $coding = null) { 
        $enc = 'UTF-8';
        $enc = 'UTF-8';
                    $coding = self:: $osPathEncoding;
        }
        
        $str = mb_convert_encoding($str, $coding, $enc);
    //偵測系統編碼
    //目前沒有找到適合的方法,只能是放一個中文文件,再循環使用不同的編碼檢測,能讀到文件就說明編碼是正確的
    protected static function _detectOsCode() {
        $codingFile = '/ -encoding-os-path.html'; __DIR__ .$codingFile;
        $allCoding = mb_list_encodings();  
        
   stripos('|byte2be|byte2le|byte4be|byte4le|UCS-4|UCS-4BE |UCS-4LE|UCS-2|UCS-2BE|UCS-2LE|UTF-32|UTF-32BE|UTF-32LE|UTF-16|UTF-16BE|UTF-16LE|', '|'.$coding. '|')) {//某些編碼會轉成非法路徑,所以,不需要偵測
                continue;
           self::_toOsCode($detectPath, $coding);
            if (@file_exists( $maybe)) {
                self::$osPathEncoding = $coding;
               
        if (empty(self::$osPathEncoding)) {
            self::_httpCode('偵測系統路徑檔案(夾)名稱的編碼失敗:可能原因之一是'.$codingFile.'文件被刪除或沒有讀取權限', 500);
        }         
    }
``````
以上就介紹了php透過變通方法偵測系統的資料夾路徑編碼,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板