php实现文件编码批量转换_PHP
有些问题,不能重复转,比如gbk转到utf8,然后有在转成utf8,这样会乱码,我本来试图在转换之前去检测编码的,貌似失败了。我特意试了一个文件,我检测它是是否是gbk或者是utf-8,都返回true。这就不懂了。
复制代码 代码如下:
/**
* 转换文件编码
* 依赖的扩展filesystem 和 mbstring
* @example
*
<br> * include_once 'ConvertEncode.php';<br> * $convert = new ConvertEncode();<br> * try{<br> * $convert->setPath('my', true, true);//目录<br> * //$convert->setPath('my.php');//单文件<br> * $convert->setEncode('GBK', 'UTF-8');<br> * $convert->convert();<br> * }catch(ConvertException $e) {<br> * echo $e->getMessage();<br> * }<br> *
*/
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 {
}

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.
