PHP一些小函數,特別是關於一些文件系統的小函數,老是不能正確處理中文,在使用的時候特別要注意這方面的問題,要麼儘可能使用中文文件名,要麼就本身寫一些小函數替代她們。php
今天又發現了一個,pathinfo在處理中文文件名時就出現了問題(在windows系統內下正常,到到Linux下就異常了windows
輸出結果爲:ide
能夠看到,當連字符「-」出如今英文文件名當中時是沒有問題的,但若是文件名是非英文字符,pathinfo函數返回的結果就有可能出現錯誤.函數
因此只能本身寫個函數處理這個問題了spa
function
my_path_info(
$filepath
) {
$path_parts
=
array
();
$path_parts
[
'dirname'
] =
substr
(
$filepath
, 0,
strrpos
(
$filepath
,
'/'
));
$path_parts
[
'basename'
] =
substr
(
$filepath
,
strrpos
(
$filepath
,
'/'
));
$path_parts
[
'extension'
] =
substr
(
strrchr
(
$filepath
,
'.'
), 1);
$path_parts
[
'filename'
] =
substr
(
$path_parts
[
'basename'
], 0,
strrpos
(
$path_parts
[
'basename'
],
'.'
));
return
$path_parts
;
}
上面狀況形於路徑」/usr/home/www/新建文件.rar」沒問題,但當碰到無路徑的文件」新建文件.rar」就會出現第一個中文被分割的現象,若是將上面的函數修改成:code
function
my_path_info(
$filepath
) {
$path_parts
=
array
();
$path_parts
[
'dirname'
] = rtrim(
substr
(
$filepath
, 0,
strrpos
(
$filepath
,
'/'
)),
"/"
).
"/"
;
$path_parts
[
'basename'
] = ltrim(
substr
(
$filepath
,
strrpos
(
$filepath
,
'/'
)),
"/"
);
$path_parts
[
'extension'
] =
substr
(
strrchr
(
$filepath
,
'.'
), 1);
$path_parts
[
'filename'
] = ltrim(
substr
(
$path_parts
[
'basename'
], 0,
strrpos
(
$path_parts
[
'basename'
],
'.'
)),
"/"
);
return
$path_parts
;
}