解決discuz 7.2無法批量上傳附件

Discuz 7.2(GBK編碼) 遷移到Linux 平臺, php已經啓用了iconv, mbstring庫


具體表現是當從所見即所得編輯器中上傳附件時,  使用普通上傳沒有問題, 但使用批量上傳時, 出現以下界面:



給人感覺是文件已經上傳成功了, 但無法顯示出文件名.


後經過我大量時間的排查 , 最終確定的原因是:


Linux平臺上當使用iconv將字符串由utf-8轉換爲gbk時, 有可能出錯.

 

而dz的批量上傳使用了swfupload, 使用flash向服務器POST數據, 這個swfupload會以utf-8編碼發送POST數據, 而gbk編碼的dz 7.2 需要將utf-8編碼的中文文件名轉爲gbk, 所以導致出錯.


解決辦法如下:


打開 dz 7.2的 include/chinese.class.php 


1. 大約34行附近, 查找if(function_exists('iconv'), 將其修改爲if(function_exists('mb_convert_encoding')


2. 在135行附近查找

return iconv($this->config['SourceLang'], $this->config['TargetLang'], $SourceText);


將其修改爲 return mb_convert_encoding($SourceText, $this->config['TargetLang'],$this->config['SourceLang']);

 

這個方法對Linux和Windows都適用, 你可以試試.


我用以上方法, 測試成功, 如果有問題, 請發Email 至[email protected]