2007年12月20日 星期四

線上資源連結到中文網頁問題

是新增線上資源中連結到檔案或網站直接連結中文檔名會造成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則能正常處理。 


沒有留言:

張貼留言