php pathinfo中文檔案名稱問題


這次碰到需要保留檔案名稱並加上亂碼的需求碰到這個問題,pathinfo在取得filename的時候如果不是ASCII碼就有可能會碰到,以前都是直接洗掉名稱而沒注意到這件事。

使用pathinfo()取得filename時碰到ASCII碼以前都抓不到東西
EX:中文測試1111.pdf只會抓到1111 中文測試.pdf會抓到空白

$path_parts = pathinfo($filename);
$re_filename = $path_parts['filename'];

修正的參考
https://stackoverflow.com/questions/4451664/make-php-pathinfo-return-the-correct-filename-if-the-filename-is-utf-8

也可以用setlocale(LC_ALL,'en_US.UTF-8');處理
不過怕其他的功能出問題採用了後面的其他方法,就是在取得之前先把名稱加上ASCII讓函數可以正確的處理字串。

把整個上傳檔案名稱丟進函數就好

//$re_filename = getFilename($_FILES['inputname']['name']);

function getFilename($path)
{
    // if there's no '/', we're probably dealing with just a filename
    // so just put an 'a' in front of it
    if (strpos($path, '/') === false)
    {
        $path_parts = pathinfo('a'.$path);
    }
    else
    {
        $path= str_replace('/', '/a', $path);
        $path_parts = pathinfo($path);
    }
    return substr($path_parts["filename"],1);
}
Tags : php