elFinder 不显示带变音符号的文件夹或文件



我在使用elFinder时遇到了问题。当服务器上有一个文件或文件夹包含字母 öäü 之一时,目录(文件)不会显示在 el finder 中,并且我在

lFinderConnector.class.php json_encode(): 无效的 UTF-8 序列 论点

但是如果我使用 elFinder 本身上传一个文件,例如:测试 ö.png它会正确显示,并且在服务器上它看起来像这样:测试 ö.png。目录也是如此。

我的问题是我有数百万个文件可以计算变音符号 (ö,ü,ä),而 elFinder 无法显示它们。

有没有人遇到这样的问题,或者有任何想法或提示如何解决它?

setlocale(LC_ALL, 'de_DE');
function array_walk_deep(&$items){
    foreach ($items as &$item) {
        if(is_array($item)) {
          array_walk_deep($item);
         } else {
            if (!strpos($item ,'ö')) {
                $item = iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($item)) ;
            }
        }
    }
}
array_walk_deep($data);

所以我只是对此做了一个解决方法。在 elFinderConnector 中,我只使用这段代码,然后再将数组返回到 javascript,这将更改 ö->oe 的 ä->ae 和 ü-> ue 将不再引起任何问题,并且将显示目录。目录和文件可以由用户重命名。希望有人会发现这很有用。

重新毕业

您的解决方案用 ASCII 字符替换变音符号,对我来说,它的工作原理是在json_encode()之前对$data数组的项目使用 utf8_encode() 并输出它(它保留变音符号)。
我拿了你的片段,修改了它,并将其添加到elFinderConnector类中。

protected function array_walk_deep(&$items){
foreach ($items as &$item) {
    if(is_array($item)) {
        $this->array_walk_deep($item);
    } else {            
        $item = utf8_encode($item);
    }
}

然后在 output() 方法中的 $data 数组上调用它。

$this->array_walk_deep($data);
exit(json_encode($data));

最新更新