這個做法跟之前的比較,再於對要處理的字串先做一些處理,以減少之後在迴圈中判斷的複雜度。

function &路徑修正($路徑, $編碼 = false, $調整 = false) {
    $陣列 = explode('://', strtr($路徑, '\\', '/'), 2);
    //    取代 '/./', '/ /', '//' 這三類字串成為 '/'
    $比對 = '/\/((([\s]+)|([\s]*\.[\s]*))?\/)+/';
    $取代 = '/';
   
    if (2 == count($陣列)) {
        $前綴 = $陣列[0] . '://';
        $陣列 = explode('/', preg_replace($比對, $取代, $陣列[1]));
    } else {
        $前綴 = '';
        $陣列 = explode('/', preg_replace($比對, $取代, $陣列[0]));
    }
   
    $路徑 = array();
    foreach ($陣列 as $變數) {
        $測試 = trim($變數);
        if ('..' == $測試) {
            $測試 = end($路徑);
            if ('' == $測試 || '..' == $測試) {
                $路徑[] = '..';
            } else {
                array_pop($路徑);
            }
        } else if (false == $編碼) {
            $路徑[] = $變數;
        } else {
            $路徑[] = urlencode($變數);
        }
    }
   
    $路徑 = implode('/', $路徑);
    if ('' != $前綴) {
        $路徑 = $前綴 . $路徑;
    } else if ($調整 && (PHP_OS == 'WIN32' || PHP_OS == 'WINNT')){
        $路徑 = strtr($路徑, '/', '\\');
    }
    return $路徑;
}
arrow
arrow
    全站熱搜

    HACGIS 發表在 痞客邦 留言(0) 人氣()