파일 인코딩을 일괄적으로 또는 개별적으로 변환

WBOY
풀어 주다: 2016-07-25 08:48:46
원래의
910명이 탐색했습니다.
원본 gbk와 같은 파일 인코딩을 utf-8로 변환합니다. 단일 파일이나 전체 파일 디렉터리, 선택적으로 재귀 디렉터리를 변환할 수 있습니다.
예를 들어 gbk를 utf8로 변환한 다음 utf8로 변환하면 문자가 깨질 수 있습니다. 원래 변환 전에 인코딩을 감지하려고 시도했지만 실패한 것 같습니다. 구체적으로 파일을 시험해보고 그것이 gbk인지 utf-8인지 확인했는데 둘 다 true를 반환했습니다. 나는 이것을 이해하지 못한다.
  1. /**
  2. * 轉換檔案編碼
  3. * 依賴的擴充filesystem 和mbstring
  4. * @example
  5. *
    로그인 후 복사
  6. * include_once 'ConvertEncode.php';
  7. * $convert ();
  8. * try{
  9. * $convert->setPath('my', true, true);//目錄
  10. * //$convert->setPath('my.php'); //單一檔案
  11. * $convert->setEncode('GBK', 'UTF-8');
  12. * $convert->convert();
  13. * }catch(ConvertException $e) {
  14. * echo $e->getMessage();
  15. * }
  16. *
  17. */
  18. class ConvertEncode {
  19. /**
  20. * 要轉換成的編碼
  21. * @var string
  22. */
  23. 每個$_to_encoding;
  24. /**
  25. * 轉換前的編碼
  26. * @var string
  27. */
  28. 頭髮$_from_encoding;
  29. /**
  30. * 要轉換的的目錄或單一檔案
  31. * @var string
  32. */
  33. 頭髮$_path;
  34. /**
  35. * 是否為目錄,當給定的是目錄是才設定
  36. * @var boolean
  37. */
  38. 血管$_directory;
  39. /**
  40. * 是否遞歸遍歷,僅對目錄有效
  41. * @var boolean
  42. */
  43. 血管$_recursion;
  44. /**
  45. * 儲存所有待轉換的文件,僅當轉換目錄裡面的文件時才用
  46. * @var array
  47. /**
  48. * 建構子
  49. * /
  50. private $_files = array();
  51. /**
  52. * 設定需要轉換的目錄或單一檔案
  53. * @param string $path 目錄或檔案
  54. * @param boolean 是否是目錄
  55. * @param boolean 是否遞歸目錄
  56. * @return boolean
  57. */
  58. public function __construct() {
  59. if( ! function_exists('mb_vert) {
  60. if( ! function_exists('mb_fenists('mb_vert)) {
  61. if( ! function_exists('mb_verten)('mb_verten) {coding') {
  62. throw new ConvertException('需要mbstring 副檔名');
  63. }
  64. }
  65. /**
  66. * 設定轉換前的編碼和要轉換到的編碼
  67. * @param string $encode 轉換前的編碼
  68. * @param string $encode 轉換到的編碼
  69. * @return boolean
  70. */
  71. public function setPath($path, $is_dir =*/
  72. public function setPath($path, $is_dir = false , $rec = false) {
  73. $this->_path = $path;
  74. $this->_directory = $is_dir;
  75. $this->_recursion = $rec;
  76. return true;
  77. }
  78. /**
  79. * 轉換編碼,依照是否為目錄的設定分別轉換
  80. * @return boolean
  81. */
  82. public function setEncode($encode_from, $encode_to) {
  83. $this->_from_encoding = $encode_to) {
  84. $this->_from_encoding = $en_from; > _to_encoding = $encode_to;
  85. return true;
  86. }
  87. /**
  88. * 轉換檔案
  89. * @throws ConvertException
  90. * @return boolean
  91. */
  92. public function Convert() {
  93. if($ this-this>_rectory ) {
  94. return $this->_convertDirectory();
  95. }
  96. return $this->_convertFile();
  97. }
  98. /**
  99. * 轉換目錄
  100. * @throws ConvertException
  101. * @return boolean
  102. */
  103. 另一個函數 _convertFile() {
  104. if( ! file_exists($this->_path) ) {
  105. $message = $this->_path . ' 不存在。 _小路。 _小路。 if( mb_check_encoding($file_content_from, $this->_from_encoding) ) {
  106. $file_content_to = mb_convert_encoding( $file_content_from, $this->_to_encoding, $this->_from_enco ); ;
  107. }
  108. return true;
  109. }
  110. /***/
  111. private function _convertDirectory() {
  112. ifists! ate function _convertDirectory() {
  113. ifists ! file_ex this->_path) ) {
  114. $message = $this->_path . ' 不存在。 ' 不是目錄。 _小路。 > $message = $this->_path 。 ' 是空目錄。
  115. if( mb_check_encoding($file_content_from, $this->_from_encoding) ) {
  116. $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 );
  117. }
  118. }
  119. 回傳true;
  120. }
  121. /**
  122. * 파일 또는 디렉터리가 읽기 및 쓰기 가능한지 확인
  123. * @return boolean은 읽기 및 쓰기가 가능하면 true를 반환하고, 그렇지 않으면 false를 반환합니다
  124. */
  125. 비공개 함수 _isWR() {
  126. if( is_readable($this->_path) && is_writable($this->_path) ) {
  127. true 반환;
  128. }
  129. false 반환;
  130. }
  131. /**
  132. * 디렉터리를 탐색하여 모든 파일과 절대 경로를 찾습니다.
  133. * @return boolean
  134. */
  135. 비공개 함수 _scanDirFiles($dir = '') {
  136. $base_path = 비어 있음( $dir ) ? 실제 경로($this->_path) . DIRECTORY_SEPARATOR : 실제 경로($dir) . DIRECTORY_SEPARATOR;
  137. $files_tmp = 비어 있음( $dir ) ? scandir($this->_path) : scandir($dir);
  138. foreach( $files_tmp as $value ) {
  139. if( $value == '.' || $value == '..' || ( strpos($value, '.') === 0 ) ) {
  140. 계속;
  141. }
  142. $value = $base_path . $value;
  143. if( is_dir($value) ) {
  144. if( $this->_recursion ) {
  145. $this->_scanDirFiles($value);
  146. }
  147. }
  148. elseif( is_file($value) ) {
  149. $this->_files[] = $value;
  150. }
  151. }
  152. return true;
  153. }
  154. }
  155. /**
  156. * 변환 예외
  157. *
  158. */
  159. class ConvertException은 예외를 확장합니다. >
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿