配合之前寫的路徑修正函數,稍微調整一下,寫出新的兩個函數:解析網址、路徑修正。


function &解析網址($網址) {
    $解析 = parse_url($網址);
    foreach ($解析 as $鍵 => $值) {
        if ('query' == $鍵) {
            parse_str($值, $解析[$鍵]);
        } else if ('path' == $鍵) {
            $解析[$鍵] = 路徑修正($值, true, 'urldecode');
        } else {
            $解析[$鍵] = urldecode($值);
        }
    }
    return $解析;
}

function &路徑修正($路徑, $輸出陣列 = false, $函數 = false, $調整 = false) {
    //    取代 '/./', '/ /', '//' 這三類字串成為 '/'
    $比對 = '/\/((([\s]+)|([\s]*\.[\s]*))?\/)+/';
    $取代 = '/';
    $陣列 = explode('/', preg_replace($比對, $取代, strtr($路徑, '\\', '/')));
   
    if (false == is_callable($函數)) {
        $函數 = false;
    }

    $路徑 = array();
    foreach ($陣列 as $變數) {
        $測試 = trim($變數);
        if ('..' == $測試) {
            $測試 = end($路徑);
            if ('' == $測試 || '..' == $測試) {
                $路徑[] = '..';
            } else {
                array_pop($路徑);
            }
        } else if (false == $函數) {
            $路徑[] = $變數;
        } else {
            $路徑[] = call_user_func($函數, $變數);
        }
    }
   
    if (false == $輸出陣列) {
        $路徑 = implode('/', $路徑);
        if ($調整 && (PHP_OS == 'WIN32' || PHP_OS == 'WINNT')){
            $路徑 = strtr($路徑, '/', '\\');
        }
    }

    return $路徑;
}

arrow
arrow
    全站熱搜

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