원본 gbk와 같은 파일 인코딩을 utf-8로 변환합니다. 단일 파일이나 전체 파일 디렉터리, 선택적으로 재귀 디렉터리를 변환할 수 있습니다. 예를 들어 gbk를 utf8로 변환한 다음 utf8로 변환하면 문자가 깨질 수 있습니다. 원래 변환 전에 인코딩을 감지하려고 시도했지만 실패한 것 같습니다. 구체적으로 파일을 시험해보고 그것이 gbk인지 utf-8인지 확인했는데 둘 다 true를 반환했습니다. 나는 이것을 이해하지 못한다.
- /**
- * 파일 인코딩 변환
- * 종속 확장 파일 시스템 및 mbstring
- * @example
- *
</li>
<li> * include_once 'ConvertEncode.php';</li>
<li> * $convert = new ConvertEncode ();</li>
<li> * try{</li>
<li> * $convert->setPath('my', true, true);//Directory</li>
<li> * //$convert->setPath('my.php ' );//단일 파일</li>
<li> * $convert->setEncode('GBK', 'UTF-8');</li>
<li> * $convert->convert();</li>
<li> * }catch(ConvertException $ e) {</li>
<li> * echo $e->getMessage();</li>
<li> * }</li>
<li> *
- */
- 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 확장자가 필요함');
- }
- }
-
- /**
- * 변환할 디렉토리 또는 단일 파일을 설정
- * @param string $path 디렉토리 또는 파일
- * @param boolean 디렉토리인지 여부
- * @param boolean 재귀 디렉토리인지 여부
- * @return 부울
- */
- 공용 함수 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
- */
- 공개 함수 setEncode($encode_from, $encode_to) {
- $this->_from_encoding = $encode_from;
- $this->_to_encoding = $encode_to;
- return true;
- }
-
- /**
- * 인코딩 변환, 디렉토리 설정 여부에 따라 별도로 변환
- * @return boolean
- */
- 공용 함수 변환() {
- if($ this->_directory ) {
- return $this->_convertDirectory();
- }
- return $this->_convertFile();
- }
-
- /**
- * 파일 변환
- * @throws ConvertException
- * @return boolean
- */
- 비공개 함수 _convertFile() {
- if( ! file_exists($this->_path) ) {
- $message = $this->_path . '이 존재하지 않습니다.';
- throw new ConvertException($message);
- }
- if( !is_file($this->_path) ) {
- $message = $this-> _길 . '는 파일이 아닙니다.';
- throw new ConvertException($message);
- }
- if( ! $this->_isWR() ) {
- $message = $this-> _길 . '는 읽고 쓸 수 있어야 합니다.';
- 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
- */
- 비공개 함수 _convertDirectory() {
- if( !file_exists($this->_path) ) {
- $message = $this->_path . '이 존재하지 않습니다.';
- throw new ConvertException($message);
- }
- if( !is_dir($this->_path) ) {
- $message = $this-> _길 . '는 디렉토리가 아닙니다.';
- throw new ConvertException($message);
- }
- if( ! $this->_isWR() ) {
- $message = $this-> _길 . '는 읽고 쓸 수 있어야 합니다.';
- throw new ConvertException($message);
- }
- $this->_scanDirFiles();
- if(empty($this->_files ) ) {
- $message = $this->_path . '는 빈 디렉토리입니다.';
- 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 );
- }
- }
- true를 반환합니다.
- }
-
- /**
- * 判斷檔案或目錄是否可讀寫
- * @return boolean 可讀寫時回傳true,否則回傳false
- */
- 創函數_isWR() {
- if( is_read($this->_path) && is_writable($this->_path) ) {
- return true;
- }
- return false;
- }
-
- /**
- * 遍歷目錄,找出所有文件,加上絕對路徑
- * @return boolean
- */
- 私有函數_scanDirFiles($dir = '') {
- $base_path = 空( $dir ) ? realpath($this->_path) 。 DIRECTORY_SEPARATOR :真實路徑($dir) 。 scandir($this->_path) : scandir($dir);
- foreach( $files_tmp as $value ) {
- if( $value == '.' || $value == '..' | | ( strpos($value, '.') === 0 ) ) {
- 續;
- }
- $value = $base_path 。 {
- if( $this->_recursion ) {
- $this->_scanDirFiles($value);
- }
- }
- elseif( is_file($value) ) {
- $
- $ this->_files[] = $value;
- }
- }
- 回傳true;
- }
- }
-
- /**
- * 轉換異常
- *
- */
- class ConvertException 擴充了Exception {
-
- }
-
複製程式碼
|
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31