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