星期二, 5月 01, 2007

PHP 讀取含有「中文」的資料夾會亂碼?

我一開始以為這是「正常」的
在網路上找相關文章都沒有
連一個正面的都沒有
是大家都太厲害了嘛 ><"
大概大家都不用中文來處理
嗯... 這是對的!
不過我的任務現在就是要這樣做 ._.
所以如無特殊要求的話
還是用英文加數字重新命名,再去跟資料庫做對應吧~


資料夾及檔名未經編碼前:



















資料夾及檔名經編碼後:



















原來的程式:(僅列出部份程式)
$path = $_SERVER['DOCUMENT_ROOT'];
$objDirectory = opendir($path);

while ($strFilename = readdir($objDirectory)) {
if (($strFilename) && ($strFilename != '.') && ($strFilename != '..') && ($strFilename != 'CVS')) {
echo $strFilename.'
';

}
}

closedir($objDirectory);


更改過後的程式:
echo iconv("BIG5", "UTF-8", $strFilename);

雖然 Windows XP 底層是用 UCS-2
這亂碼的情形剛好在我的電腦還有 Server 都發生

我的 Notebook 開發環境如下:
  • Windows XP Home Edition SP2 English version
  • Control Panel 中的 Regional and Language Options。Location 是 Taiwan;Advanced 中的 Language for non-Unicode programs 是 Chinese(Taiwan)。
  • PHP 使用 UTF-8 編碼
  • Apache 2.2.4 / PHP 5.2.1
而 Server 的環境如下:
  • FreeBSD 6.2-RELEASE i386
    (可用 uname -r 查詢)
  • Apache 2.2.3 / PHP 5.1.6
  • Samba 使用 CP950 編碼
Server 這邊用 Samba 是因為網芳的關係,所以不得不用,我沒試過用 unicode 編碼不知道 Windows 網芳會如何


Keyword:
php, readdir, opendir, closedir, iconv, unicode, UTF-8, UCS-2, UTF-16, CP950

2 則留言:

匿名 提到...

這個程式可以一直往下讀取到最後一層嗎?

找回當初那份感動 提到...

不行 :3
原本程式可以,不過我改過
因為裡面有用到期他的 class
所以就自己練習看看吧 ^^

 
↗ online | Total: