Laravel的File :: files函数不返回包含中文字符的文件名

时间:2016-01-05 19:16:14

标签: php laravel

目前我的工作方式如下,并且适用于英文文件名。

$filePaths = File::files(storage_path() . '/files/somepath');
foreach($filePaths as $path){
    array_push($somearray, pathinfo($path, PATHINFO_BASENAME));
}

$ filePaths不包含中文文件名。

我该如何解决这个问题?还有另一种解决方法吗?

1 个答案:

答案 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