원본 gbk와 같은 파일 인코딩을 utf-8로 변환합니다. 단일 파일이나 전체 파일 디렉터리, 선택적으로 재귀 디렉터리를 변환할 수 있습니다. 예를 들어 gbk를 utf8로 변환한 다음 utf8로 변환하면 문자가 깨질 수 있습니다. 원래 변환 전에 인코딩을 감지하려고 시도했지만 실패한 것 같습니다. 구체적으로 파일을 시험해보고 그것이 gbk인지 utf-8인지 확인했는데 둘 다 true를 반환했습니다. 나는 이것을 이해하지 못한다.
-
/**
- * 轉換檔案編碼
- * 依賴的擴充filesystem 和mbstring
- * @example
- *
- * include_once 'ConvertEncode.php';
- * $convert ();
- * try{
- * $convert->setPath('my', true, true);//目錄
- * //$convert->setPath('my.php'); //單一檔案
- * $convert->setEncode('GBK', 'UTF-8');
- * $convert->convert();
- * }catch(ConvertException $e) {
- * echo $e->getMessage();
- * }
- *
- */
- class ConvertEncode {
-
- /**
- * 要轉換成的編碼
- * @var string
- */
- 每個$_to_encoding;
-
- /**
- * 轉換前的編碼
- * @var string
- */
- 頭髮$_from_encoding;
-
- /**
- * 要轉換的的目錄或單一檔案
- * @var string
- */
- 頭髮$_path;
- /**
- * 是否為目錄,當給定的是目錄是才設定
- * @var boolean
- */
- 血管$_directory;
-
- /**
- * 是否遞歸遍歷,僅對目錄有效
- * @var boolean
- */
- 血管$_recursion;
-
- /**
- * 儲存所有待轉換的文件,僅當轉換目錄裡面的文件時才用
- * @var array
- /**
- * 建構子
- * /
- private $_files = array();
-
- /**
- * 設定需要轉換的目錄或單一檔案
- * @param string $path 目錄或檔案
- * @param boolean 是否是目錄
- * @param boolean 是否遞歸目錄
- * @return boolean
- */
- public function __construct() {
- if( ! function_exists('mb_vert) {
- if( ! function_exists('mb_fenists('mb_vert)) {
- if( ! function_exists('mb_verten)('mb_verten) {coding') {
- throw new ConvertException('需要mbstring 副檔名');
- }
- }
-
- /**
- * 設定轉換前的編碼和要轉換到的編碼
- * @param string $encode 轉換前的編碼
- * @param string $encode 轉換到的編碼
- * @return boolean
- */
- public function setPath($path, $is_dir =*/
- public function setPath($path, $is_dir = false , $rec = false) {
- $this->_path = $path;
- $this->_directory = $is_dir;
- $this->_recursion = $rec;
- return true;
- }
-
- /**
- * 轉換編碼,依照是否為目錄的設定分別轉換
- * @return boolean
- */
- public function setEncode($encode_from, $encode_to) {
- $this->_from_encoding = $encode_to) {
- $this->_from_encoding = $en_from; > _to_encoding = $encode_to;
- return true;
- }
-
- /**
- * 轉換檔案
- * @throws ConvertException
- * @return boolean
- */
- public function Convert() {
- if($ this-this>_rectory ) {
- return $this->_convertDirectory();
- }
- return $this->_convertFile();
- }
-
- /**
- * 轉換目錄
- * @throws ConvertException
- * @return boolean
- */
- 另一個函數 _convertFile() {
- if( ! file_exists($this->_path) ) {
- $message = $this->_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_enco ); ;
- }
- return true;
-
- }
-
- /***/
- private function _convertDirectory() {
- ifists! ate function _convertDirectory() {
- ifists ! file_ex this->_path) ) {
- $message = $this->_path . ' 不存在。 ' 不是目錄。 _小路。 > $message = $this->_path 。 ' 是空目錄。
- if( mb_check_encoding($file_content_from, $this->_from_encoding) ) {
- $file_content_to = mb_convert_encoding( $file_content_from, $this->_to_encoding, $this-_coding( $file_content_from, $this->_to_encoding, $this-_coding, $this-_from_from_from_from_from_ffrom_ffrom_ffrom_from_from_from_from_from_from_froms; $file_content_to );
- }
- }
- 回傳true;
- }
-
- /**
- * 파일 또는 디렉터리가 읽기 및 쓰기 가능한지 확인
- * @return boolean은 읽기 및 쓰기가 가능하면 true를 반환하고, 그렇지 않으면 false를 반환합니다
- */
- 비공개 함수 _isWR() {
- if( is_readable($this->_path) && is_writable($this->_path) ) {
- true 반환;
- }
- false 반환;
- }
-
- /**
- * 디렉터리를 탐색하여 모든 파일과 절대 경로를 찾습니다.
- * @return boolean
- */
- 비공개 함수 _scanDirFiles($dir = '') {
- $base_path = 비어 있음( $dir ) ? 실제 경로($this->_path) . DIRECTORY_SEPARATOR : 실제 경로($dir) . DIRECTORY_SEPARATOR;
- $files_tmp = 비어 있음( $dir ) ? scandir($this->_path) : scandir($dir);
- foreach( $files_tmp as $value ) {
- if( $value == '.' || $value == '..' || ( strpos($value, '.') === 0 ) ) {
- 계속;
- }
- $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은 예외를 확장합니다. >
-
-
|