2008年11月25日 星期二

win32 下 PHP讀取中文檔名

在設計程式時,常會用到上傳圖檔或其他檔案,
但是PHP讀取時會因為跳脫字元而使的中文檔名掛掉,
所以一般都會重新編碼
但這樣在管理上就比較麻煩

讀取中文檔時:htmlentities(urlencode($pic_file))

寫入中文檔時:
function BIG5_name($name){

 //判別中文是否能轉換為BIG5碼,若不行則以日期顯示
 
 $tname=iconv("utf-8","big5",$name);
  if( mb_strlen($name,"utf-8")  <>  mb_strlen($tname,"big5")  ){
  $per_name_big5="";
        for($ai=0;$ai < mb_strlen($name,"UTF-8");$ai++){
             $str_tmp=mb_substr($name,$ai,1,"UTF-8");
             
             mt_srand((double)microtime()*1000000);
             if( mb_strlen(iconv("utf-8","big5",$str_tmp),"big5") ==0 )
               $per_name_big5 .= mt_rand(10,99);
             else $per_name_big5 .=$str_tmp;   
        }
 }else $per_name_big5=$name;


 
 //判別中文是否為跳脫字元(許功蓋),若不行則以日期顯示
 $name=$per_name_big5;
 $tname=iconv("utf-8","big5",$name);
  if(substr_count(urlencode($tname),"%5C") > 0 ) {
        $per_name_big5="";
        for($ai=0;$ai < mb_strlen($name,"UTF-8");$ai++){
             $str_tmp=mb_substr($name,$ai,1,"UTF-8");
             
             mt_srand((double)microtime()*1000000);
             if(substr_count(urlencode(iconv("utf-8","big5",$str_tmp)),"%5C") > 0 )
               $per_name_big5 .= mt_rand(10,99);
             else $per_name_big5 .=$str_tmp;   
        }
   
  }else $per_name_big5=$name;

  

  return $per_name_big5;
}