目前我的工作方式如下,并且适用于英文文件名。
$filePaths = File::files(storage_path() . '/files/somepath');
foreach($filePaths as $path){
array_push($somearray, pathinfo($path, PATHINFO_BASENAME));
}
$ filePaths不包含中文文件名。
我该如何解决这个问题?还有另一种解决方法吗?
答案 0 :(得分:1)
这个问题与Laravel无关,而与PHP pathinfo()
函数无关,后者无法处理像中文这样的非标准字符。
Workaroud是制作您自己的功能并使用它而不是pathinfo()
:
if (!function_exists("mb_pathinfo"))
{
function mb_pathinfo($path, $opt = "")
{
$separator = " qq ";
$path = preg_replace("/[^ ]/u", $separator."\$0".$separator, $path);
if ($opt == "") $pathinfo = pathinfo($path);
else $pathinfo = pathinfo($path, $opt);
if (is_array($pathinfo))
{
$pathinfo2 = $pathinfo;
foreach($pathinfo2 as $key => $val)
{
$pathinfo[$key] = str_replace($separator, "", $val);
}
}
else if (is_string($pathinfo)) $pathinfo = str_replace($separator, "", $pathinfo);
return $pathinfo;
}
}
相关问题:Make PHP pathinfo() return the correct filename if the filename is UTF-8