我用 wamp 自己搭建了一個本地網站學習 PHP ,系統是 Windows8 , WEB 網頁是:
編碼,
然而在處理中文目錄與檔案名稱時出現亂碼,在網上搜尋一下說是要用
$dir=iconv('UTF-8','GB2312',$dir); 解碼目錄為中文然後再操作,然後再用
$dir=iconv('GB2312','UTF-8',$dir); 反編碼顯示出來。
這方法也確實可行。
然而沒想到的上我上傳頁面到購買的 WEB HOSTING 伺服器上時,會出現亂碼,
而不用解碼與反解碼操作時不會出現亂碼,WEB HOSTING 是 LINUX 下的 CPANEL,
實在是想不通為什麼為出現這種差別。
小弟初學PHP,有大俠為我解惑一下出現這種問題的原因嗎?
或是根本是我本地機子上的網站沒有配置好?
回複討論(解決方案)
其實不建議使用中文目錄路徑。
把GB2312改為GBK試試。
作業系統字元集
Winodws GBK
Linux UTF-8
當網頁字元集與作業系統字元集相同時,檔案名稱就不需轉碼
如果我開發一個PHP的通用模版,怎麼辦,還要判斷 系統集?
是的,既然是通用的,那麼就要針對不同的環境做出相應的應對
不能把問題留給使用者
比如你的中文檔案名稱問題,就不應該簡單的 $dir=iconv('UTF-8','GB2312',$dir);
而可以這樣:
在設定檔中寫到
define('APP_CHARSET', 'UTF-8');
define('OS_CHARSET', substr(PHP_OS, 0, 3) == 'WIN' ? 'GBK' : 'UTF-8');
這樣 $dir=iconv('UTF-8','GB2312',$dir);
寫作 $dir=iconv('APP_CHARSET, OS_CHARSET, $dir);
就通用化了
還可進一步
function lang(&$str) {
return $str = iconv('APP_CHARSET, OS_CHARSET, $str);
}
程式中
lang($dir);
$path = lang($dir);
都可以