moodle新增線上資源中連結到檔案或網站,直接連結中文檔名會造成IE6無法找到檔案問題解決方法。

10/23/2007

前篇文章提出解決中文檔名上傳下載備份解壓縮問題,但是新增線上資源中連結到檔案或網站直接連結中文檔名會造成IE6無法找到檔案問題。

原因描述:
此問題只會出現在IE6,IE7或Firefox並不會出現此問題,原因仍發生在IE6送網址仍以BIG5送出,前篇文章於下載檔案時將檔名轉成BIG5即可,但是本文問題出現在線上資源存取方式為先呼叫mod/resource/view.php判斷是何種資源再呼叫相關的程式(例如file.php),而中文檔名經IE6變成BIG5碼再呼叫file.php則造成 //check that file exists下一行檢查檔名找不到檔案

修正方法:
修改mod/resource/type/file/resource.class.php將中文檔名經urlencode則能正常

原來:
}else { //Normal Uploaded file
  if ($CFG->slasharguments) {

$relativeurl="/file.php/{$course->id}/{$resource->reference}";

上一行改成

if (check_browser_version()) {
        if (!check_browser_version("MSIE","7")) {

            $str=$resource->reference;
            $en="";
            while ($str<>".")
            {
                $en=urlencode(basename($str)).$en;
               //注意!若系統為PHP5.1.6則上一行需改成
   
               //$en=urlencode(file_basename($str)).$en;  
               //PHP5.2.4測試後basename已可正常處理中文,因此可不用改成file_basename
  
                $str=dirname($str);
                if ($str<> ".")
                    $en="/".$en;
            }
            $relativeurl = "/file.php/{$course->id}/$en";

        }
        else
            $relativeurl = "/file.php/{$course->id}/{$resource->reference}";
    }
    else
       $relativeurl = "/file.php/{$course->id}/{$resource->reference}";

 紅色部份為檢查IE6,藍色部份因資料夾也可能是中文

附記:php5.1.6 basename對UTF-8中文處理會有問題,但php5.2.4則能正常處理。 

11 Comments Add your own


  • 1. hufun  |  11/01,2007

    檔案中還有一個部份可能需要修改喔
    basename
    要修改成
    file_basename

  • 2. RFWU  |  11/01,2007

    謝謝指教
    在前篇[Moodle中文檔名上傳與下載與zip壓縮解壓縮問題]
    提到對PHP5.1.6的basename function處理中文造成錯誤,因此做一個file_basename取代原來的basename。後來測試PHP5.2.4的basename function處理中文就正常了,於是把系統升級到PHP5.2.4,因此在上面文章中才沒有把basename改為file_basename。

    在上面文章中再把這一行註解說明一下,以免有興趣參閱的其他人造成測試的困擾。再次謝謝。

  • 3. hufun  |  11/02,2007

    其他的部份是不是還要修改

  • 4. RFWU  |  11/03,2007

    只針對basename函數:

    視系統所安裝的PHP版本而定
    若PHP5.1.6則所有basename函數全部需改成file_basename

    若是PHP5.2.4因basename函數已修正,故原來basename全部不需修改

  • 5. hufun  |  11/17,2007

    吳兄
    我整理了一個各種moodle資源收集的2.0網頁
    也把您的部落格連過去了
    http://www.protopage.com/ttjh2.0#ttjh/Moodle2.0

  • 6. fuyun  |  11/27,2007

    謝謝您的方法,讓我更能方便的使用 moodle 。

  • 7. illu  |  04/08,2008

    你好 我在作業上傳時 會有中文檔案遺失的問題 你問要修改哪裡 謝謝

  • 8. ilu  |  04/08,2008

    你好 中文部分上傳遺失後 亦無法刪除網頁上的資訊

  • 9. Rong-Fang Wu  |  04/09,2008

    1. 只要把moodle 1.8.4安裝在Unix(FreeBSD or Linux)作業系統下,且PHP版本是5.2.4以後中文問題無須修改程式碼,無論上傳中文檔名檔案或作業均不會有問題,建議請安裝在上述環境中。
    切記不要安裝在windows作業系統下,無論怎樣改程式碼還是會有big5與utf-8問題。

    2.亂碼無法刪除的作業,只好在作業系統下刪除,檔案擺在moodledata下相對應的課程ID下的moddata

  • 10. illu  |  04/10,2008

    升級5.2.4 那我之前改的步就通通要改回來了 CENTOS5 如何下指令升級? 謝謝

  • 11. Rong-Fang Wu  |  06/04,2008

    補充IE6還原中文檔問題 1. 於file/index.php 597行print_simple_box_start下加入$file=urlencode($file) 2.於backup/restore_check.html 243行於 "echo


Leave a Reply

Required

Required, hidden


 authimage


Around here

Categories

我的連結

BLOGs

eLearning

Feeds