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


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 $路徑;
}

創作者介紹

失落的技術

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


留言列表 (2)

發表留言
  • 令狐小兄弟
  • 其實我覺得或許可以在這些函式的前面或是後面再加上個使用方法和目的,這樣對於觀看的人也能比較快的進入狀況
  • HACGIS
  • 其實那個函數還有些問題,我晚上測試完後會外寫一篇,附上範例程式碼跟說明,這樣會比較清楚。

找更多相關文章與討論