亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php實現文件編碼批量轉換

2024-05-04 23:21:59
字體:
來源:轉載
供稿:網友

有些問題,不能重復轉,比如gbk轉到utf8,然后有在轉成utf8,這樣會亂碼,我本來試圖在轉換之前去檢測編碼的,貌似失敗了。我特意試了一個文件,我檢測它是是否是gbk或者是utf-8,都返回true。這就不懂了。

復制代碼 代碼如下:


<?php
/**
 * 轉換文件編碼
 * 依賴的擴展filesystem 和 mbstring
 * @example
 * <pre>
 * include_once 'ConvertEncode.php';
 * $convert = new ConvertEncode();
 * try{
 *   $convert->setPath('my', true, true);//目錄
 *    //$convert->setPath('my.php');//單文件
 *   $convert->setEncode('GBK', 'UTF-8');
 *   $convert->convert();
 * }catch(ConvertException $e) {
 *   echo $e->getMessage();
 * }
 * </pre>
 */
class ConvertEncode {

 /**
  * 要轉換成的編碼
  * @var string
  */
 private $_to_encoding;

 /**
  * 轉換前的編碼
  * @var string
  */
 private $_from_encoding;

 /**
  * 要轉換的的目錄或者單文件
  * @var string
  */
 private $_path;

 /**
  * 是否是一個目錄,當給出的是目錄是才設置
  * @var boolean
  */
 private $_directory;

 /**
  * 是否遞歸遍歷,僅對目錄有效
  * @var boolean
  */
 private $_recursion;

 /**
  * 保存所有待轉換的文件,僅當轉換目錄里面的文件時才用
  * @var array
  */
 private $_files = array();

 /**
  * 構造函數
  */
 public function __construct() {
  if( ! function_exists('mb_convert_encoding') ) {
   throw new ConvertException('mbstring extension be required');
  }
 }

 /**
  * 設置需要轉換的目錄或者單文件
  * @param string $path 目錄或者文件
  * @param boolean 是否是目錄
  * @param boolean 是否遞歸目錄
  * @return boolean
  */
 public function setPath($path, $is_dir = false, $rec = false) {
  $this->_path = $path;
  $this->_directory = $is_dir;
  $this->_recursion = $rec;
  return true;
 }

 /**
  * 設置轉換前的編碼和要轉換到的編碼
  * @param string $encode 轉換前的編碼
  * @param string $encode 轉換到的編碼
  * @return boolean
  */
 public function setEncode($encode_from, $encode_to) {
  $this->_from_encoding = $encode_from;
  $this->_to_encoding   = $encode_to;
  return true;
 }

 /**
  * 轉換編碼,根據是否是目錄的設置分別轉換
  * @return boolean
  */
 public function convert() {
  if($this->_directory ) {
   return $this->_convertDirectory();
  }
  return $this->_convertFile();
 }

 /**
  * 轉換文件
  * @throws ConvertException
  * @return boolean
  */
 private function _convertFile() {
  if( ! file_exists($this->_path) ) {
   $message = $this->_path . ' does not exist.';
   throw new ConvertException($message);
  }
  if( ! is_file($this->_path) ) {
   $message = $this->_path . ' is not a file.';
   throw new ConvertException($message);
  }
  if( ! $this->_isWR() ) {
   $message = $this->_path . ' must can be read and write.';
   throw new ConvertException($message);
  }
  $file_real_path    = realpath($this->_path);
  $file_content_from = file_get_contents( $file_real_path );
  if( mb_check_encoding($file_content_from, $this->_from_encoding) ) {
   $file_content_to   = mb_convert_encoding( $file_content_from, $this->_to_encoding, $this->_from_encoding );
   file_put_contents( $file_real_path, $file_content_to );
  }
  return true;

 }

 /**
  * 轉換目錄
  * @throws ConvertException
  * @return boolean
  */
 private function _convertDirectory() {
  if( ! file_exists($this->_path) ) {
   $message = $this->_path . ' does not exist.';
   throw new ConvertException($message);
  }
  if( ! is_dir($this->_path) ) {
   $message = $this->_path . ' is not a directory.';
   throw new ConvertException($message);
  }
  if( ! $this->_isWR() ) {
   $message = $this->_path . ' must can be read and write.';
   throw new ConvertException($message);
  }
  $this->_scanDirFiles();
  if( empty($this->_files) ) {
   $message = $this->_path . ' is a empty directory.';
   throw new ConvertException($message);
  }
  foreach( $this->_files as $value ) {
   $file_content_from = file_get_contents( $value );
   if( mb_check_encoding($file_content_from, $this->_from_encoding) ) {
    $file_content_to   = mb_convert_encoding( $file_content_from, $this->_to_encoding, $this->_from_encoding );
    file_put_contents( $value, $file_content_to );
   }
  }
  return true;
 }

 /**
  * 判斷文件或者目錄是否可讀寫
  * @return boolean 可讀寫時返回true,否則返回false
  */
 private function _isWR() {
  if( is_readable($this->_path) && is_writable($this->_path) ) {
   return true;
  }
  return false;
 }

 /**
  * 遍歷目錄,找出所有文件,加上絕對路徑
  * @return boolean
  */
 private function _scanDirFiles($dir = '') {
  $base_path = empty( $dir ) ? realpath($this->_path) . DIRECTORY_SEPARATOR : realpath($dir) . DIRECTORY_SEPARATOR;
  $files_tmp = empty( $dir ) ? scandir($this->_path) : scandir($dir);
  foreach( $files_tmp as $value ) {
   if( $value == '.' || $value == '..' || ( strpos($value, '.') === 0 ) ) {
    continue;
   }
   $value = $base_path . $value;
   if( is_dir($value) ) {
    if( $this->_recursion ) {
     $this->_scanDirFiles($value);
    }
   }
   elseif( is_file($value) ) {
    $this->_files[] = $value;
   }
  }
  return true;
 }
}

/**
 * 轉換異常
 *
 */
class ConvertException extends Exception {

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕欧美视频在线| 午夜精品久久久久久久白皮肤| 欧美电影在线观看高清| 亚洲天堂影视av| 日本韩国欧美精品大片卡二| 国色天香2019中文字幕在线观看| 亚洲精品国产精品国自产观看浪潮| 在线观看日韩www视频免费| 欧美激情在线观看视频| 国产日韩精品在线播放| 国产日韩欧美视频在线| 亚洲毛片在线免费观看| 91成人在线观看国产| 精品一区二区三区四区| 久久影视电视剧免费网站| 欧美小视频在线观看| 国产精品高潮粉嫩av| 久久亚洲精品一区二区| 欧美午夜激情视频| 91香蕉电影院| 久久精品久久精品亚洲人| 成人在线一区二区| 久久99热这里只有精品国产| 久久久久这里只有精品| 亚洲电影在线看| 亚洲精品乱码久久久久久金桔影视| 九九热这里只有在线精品视| 亚洲一区二区三区xxx视频| 日韩av大片在线| 久久福利视频导航| 久久久国产视频| 97久久精品国产| 日本成熟性欧美| 欧美天堂在线观看| 91亚洲永久免费精品| 国产中文字幕亚洲| 日本一欧美一欧美一亚洲视频| 国产综合视频在线观看| 欧美在线视频观看免费网站| 91美女福利视频高清| 日韩av色在线| 久久香蕉精品香蕉| 91老司机精品视频| 日韩精品久久久久久福利| 欧美成人精品三级在线观看| 欧美韩日一区二区| 国内精品美女av在线播放| 亚洲精品久久久久久久久久久久| 亚洲第一视频在线观看| 欧美日韩一区二区精品| 欧美性受xxxx黑人猛交| 色偷偷9999www| 亚洲最大福利视频网站| 国产精品网址在线| 中文综合在线观看| 欧美俄罗斯性视频| 欧美一区在线直播| 成人乱色短篇合集| 日本乱人伦a精品| 亚洲美女性生活视频| 亚洲美女久久久| 91sa在线看| 亚洲a在线观看| 在线一区二区日韩| 一级做a爰片久久毛片美女图片| 欧美激情视频三区| 亚洲天堂av在线免费| 九九视频直播综合网| 久久综合久久美利坚合众国| 国产91在线高潮白浆在线观看| 91精品国产91久久久久久久久| 91精品国产综合久久男男| 亚洲国产精品资源| 欧美成人免费网| 国产精品欧美一区二区三区奶水| 78m国产成人精品视频| 欧美激情视频三区| 日韩国产精品亚洲а∨天堂免| 91在线视频一区| 精品无人区太爽高潮在线播放| 欧美激情乱人伦| 亚洲电影成人av99爱色| 91在线视频九色| 国产成人鲁鲁免费视频a| 中文字幕国产精品久久| 97国产一区二区精品久久呦| 热久久这里只有| 欧美性精品220| 欧美激情性做爰免费视频| 久久影院在线观看| 精品亚洲一区二区三区四区五区| 亚洲国产精品大全| 欧美不卡视频一区发布| 亚洲精品电影在线| 欧美日韩国产丝袜美女| 91九色视频导航| 性金发美女69hd大尺寸| 亚洲欧美日韩国产中文| 久久久亚洲福利精品午夜| 久久精品人人爽| 亚洲欧美一区二区三区情侣bbw| 人人澡人人澡人人看欧美| 亚洲网站视频福利| 日韩有码在线播放| 亚洲福利影片在线| 国产欧美日韩免费| 国产国语刺激对白av不卡| 国产99视频精品免视看7| 欧洲精品久久久| 国产精品69精品一区二区三区| 国产一区二区日韩精品欧美精品| 国产精品久久av| 欧美性生交大片免网| 欧美中文在线视频| 国产精品福利网| 91精品视频观看| 久久免费国产精品1| 91精品国产99| 一夜七次郎国产精品亚洲| 91精品国产九九九久久久亚洲| 热久久99这里有精品| 国产精品入口夜色视频大尺度| 欧洲成人免费视频| 欧美精品久久久久久久免费观看| 日韩av一区在线观看| 日韩中文字幕网址| 97在线免费观看视频| 黑人极品videos精品欧美裸| 亚洲精品日韩久久久| 欧美日韩国产中文精品字幕自在自线| 欧美日韩精品在线| 亚洲精品网站在线播放gif| 国语自产精品视频在免费| 欧美中文字幕在线观看| 亚洲香蕉成人av网站在线观看| 夜夜嗨av一区二区三区四区| 国产91精品青草社区| 久久国产一区二区三区| 国产一区私人高清影院| 亚洲字幕在线观看| 日韩精品在线看| 国产一区欧美二区三区| 亚洲色图在线观看| 日本一区二区不卡| 91最新国产视频| 亚洲女人初尝黑人巨大| 久久国产精品视频| 亚洲精品国产综合区久久久久久久| 日韩一区二区三区在线播放| 91精品久久久久久综合乱菊| 亚洲社区在线观看| 社区色欧美激情 | 中文在线不卡视频| 日本视频久久久| 国产69精品99久久久久久宅男| 久久精品视频在线| 91精品在线观| 久久久www成人免费精品张筱雨| 九九热这里只有精品6| 2019亚洲日韩新视频| 性欧美长视频免费观看不卡| 日韩欧美在线网址| 国产精品老女人精品视频| 亚洲综合视频1区|