删除PHP中包含非英文字符的目录


Delete dir with non english characters in PHP

我有一个函数,它扫描服务器上的目录,读取文件,用它做一些事情,然后删除目录(嵌套)

函数很长,所以我会发布相关部分。

//many other things ...
    $dir_to_delete[] = $filename['dirname']; // the array to hold all the dirs.
        } // end for each
                $dir_to_delete_clean = array_unique($dir_to_delete); //clean array - we might have duplicated dir names 
                 foreach ($dir_to_delete_clean as $delete) {
                 o99_deleteDirectory($delete) ;
                 }
                // rmdir( $filename['dirname'] );
    return $attc_id;
    }

这是非空目录的删除功能:

function o99_deleteDirectory($dir) {
    if (!file_exists($dir)) return true;
    if (!is_dir($dir)) return unlink($dir);
    foreach (scandir($dir) as $item) {
        if ($item == '.' || $item == '..') continue;
        if (!o99_deleteDirectory($dir.DIRECTORY_SEPARATOR.$item)) return false;
    }
    return rmdir($dir);
}

它非常有效。

问题是,当我检查非英语字符(德语、中文、希伯来语、阿拉伯语、西里尔语或任何其他)时,脚本失败并停止。。。

然后我尝试了rename()、rmdir()等等——它们都失败了。这是一个PHP错误吗?我该如何解决这个问题?我甚至不能重命名它们以稍后删除8,因为重命名()也失败了。。。

有什么想法吗??

编辑I

我忘了提到它是用于wordpress插件的,但我认为它没有什么区别。。。

编辑II

如果有人想尝试但没有正确的键盘/语言设置,我会在这里发布一些语言。我不确定剪切和粘贴是否会给出正确的编码,但可以随时尝试。。。

  • 希伯来语
  • 中國的(中国传统)
  • عربي(阿拉伯语)
  • ириллица(西里尔文)
  • ελληικά(希腊语)
  • (德语、意大利语、西班牙语和其他欧洲人)

在扫描或删除目录之前是否尝试设置区域设置。http://www.php.net/manual/en/function.setlocale.php

我还没试过,但你可以试一试。这可能会有所帮助。