close
配合之前寫的路徑修正函數,稍微調整一下,寫出新的兩個函數:解析網址、路徑修正。
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 $路徑;
}
全站熱搜
留言列表