PHP 中文亂碼,Winodws與Linux下不同處理疑問?

來源:互聯網
上載者:User
我用 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);
都可以

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.