【问题标题】:Laravel's File::files function does not return file names containing chinese charactersLaravel 的 File::files 函数不返回包含中文字符的文件名
【发布时间】:2016-04-09 17:49:24
【问题描述】:

目前我的工作如下所示,它适用于英文文件名。

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

$filePaths 不包含中文文件名。

我该如何解决这个问题?还有其他解决方法吗?

【问题讨论】:

  • 你的问题标题和描述有点矛盾。 $filePath是否包含中文文件名?
  • 如果您对我下面的回答感到满意,您可以接受:)

标签: php laravel


【解决方案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

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2015-09-23
相关资源
最近更新 更多