我在使用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));