2013年7月31日 星期三

PHP - 路徑與檔名

pathinfo() 函數在遇到中文時會有問題,只能抓到英文字串。所以還是要另外處理。
這篇有解法:php的pathinfo()函数处理中文问题解决办法 [原创]

不過它的做法只能處理 Linux 樣式的斜線 / 。我改良了一下做法,可以自動判斷斜線樣式:

$filepath = '\\\\someonePC\share\業務\報價單\ABC有限公司_2013-07-31_02-45-43.xls';
echo $filepath;
$arr = myPathInfo($filepath);
echo "<pre>".print_r($arr,1)."</pre>";

function myPathInfo($filepath){
    if(preg_match("#\\\#", $filepath)){ //3個斜線代表1個斜線,應該是因為要跳脫2次
        $delimiter = '\\'; //2個斜線代表1個斜線
    }
    else{
        $delimiter = '/';
    }
    $path_parts = array();   
    $path_parts['basename'] = ltrim(substr($filepath, strrpos($filepath, $delimiter)),$delimiter);   
    $path_parts['extension'] = substr(strrchr($filepath, '.'), 1);
    $path_parts['filename'] = ltrim(substr($path_parts ['basename'], 0, strrpos($path_parts ['basename'], '.')),$delimiter);
    $pos = strrpos($filepath, $path_parts['filename']);
    $path_parts['dirname'] = substr($filepath, 0, $pos);
    return $path_parts;   
}  

結果:

\\someonePC\share\業務\報價單\ABC有限公司_2013-07-31_02-45-43.xls
Array
(
    [basename] => ABC有限公司_2013-07-31_02-45-43.xls
    [extension] => xls
    [filename] => ABC有限公司_2013-07-31_02-45-43
    [dirname] => \\someonePC\share\業務\報價單\
)
副檔名的話,這篇 PHP 取得檔案的副檔名(PHP Get File Extension)  也有另一種寫法可以參考。


沒有留言:

張貼留言