在 PHP 中,使用 readdir()
函數讀取目錄內容時,如果目錄中包含中文字符,可能會遇到亂碼問題。這是因為默認情況下,readdir()
函數返回的是文件名,而不是文件名對應的完整路徑。為了解決這個問題,你需要將目錄和文件名都轉換為 Unicode 編碼(如 UTF-8),然后進行比較和處理。
以下是一個處理中文路徑的示例:
<?php
// 打開目錄
$dir = opendir("path/to/your/directory");
if ($dir) {
// 設置字符編碼為 UTF-8
setlocale(LC_ALL, 'zh_CN.UTF-8');
while (($filename = readdir($dir)) !== false) {
// 獲取文件的完整路徑
$filepath = "path/to/your/directory/" . $filename;
// 檢查是否為目錄
if (is_dir($filepath)) {
// 處理中文目錄名
echo "Directory: " . $filename . PHP_EOL;
} else {
// 處理中文文件名
echo "File: " . $filename . PHP_EOL;
}
}
// 關閉目錄
closedir($dir);
} else {
echo "Error: Unable to open directory.";
}
?>
在這個示例中,我們首先使用 setlocale()
函數設置字符編碼為 UTF-8。然后,我們使用 readdir()
函數讀取目錄內容,并將文件名和完整路徑轉換為 Unicode 編碼。最后,我們檢查文件名是否為目錄,并相應地處理中文目錄名和文件名。