php 转换编码

发布网友 发布时间:2022-04-06 01:04

我来回答

2个回答

懂视网 时间:2022-04-06 05:25

php转换文件编码的方法:使用函数【str_replace】转换文件编码到新文件夹,代码为【$newPath = str_replace(THIS_PATH, THIS_PATH . DS . Cover, $v)】。

php转换文件编码的方法:

代码

<?php
define('THIS_FILE', __FILE__); // 此文件路径,请勿修改,将跳过此文件
define('THIS_PATH', dirname(THIS_FILE)); // 当前路径,可修改
define('Cover', 'new'); // 是否直接覆盖本文件(改为 true 不加单引号,危险),建议写入其他地址(相对于当前路径)
define('DS', DIRECTORY_SEPARATOR); // Linux改为'/',Windows为''
define('ICONV', 'UTF-8'); // 最终转换编码格式
function eachFile($path, $files = [])
{
 if (Cover !== true && $path == THIS_PATH . DS . Cover) {
 return $files;
 }
 if (preg_match("/[x7f-xff]/", $path)) {
 $path = iconv('UTF-8', 'GBK', $path);
 }
 if (is_file($path)) {
 $files[] = $path;
 return $files;
 }
 $list = scandir($path);
 foreach ($list as $k => $v) {
 if ($v !== '.' && $v !== '..') {
  $p = $path . DS . $v;
  // 路径转码GBK
  if (preg_match("/[x7f-xff]/", $p)) {
  $p = iconv('UTF-8', 'GBK', $p);
  }
  if (is_dir($p)) {
  $files = eachFile($p, $files);
  } else {
  $files[] = $p;
  }
 }
 }
 return $files;
}
$files = eachFile(THIS_PATH);
foreach ($files as $k => $v) {
 $ext = pathinfo($v, PATHINFO_EXTENSION);
 if (in_array($ext, ['txt', 'php', 'css', 'js', 'htm', 'html'])) {
 if ($v == THIS_FILE) continue;
 // 获取内容并转码
 $contents_before = file_get_contents($v);
 $oldIconv = mb_detect_encoding($contents_before, array('ASCII', 'GB2312', 'GBK', 'UTF-8', 'BIG5'));
 $contents_after = iconv($oldIconv, ICONV, $contents_before);
 if (Cover !== true) {
  // 判断新文件夹是否存在
  $newPath = str_replace(THIS_PATH, THIS_PATH . DS . Cover, $v);
  if (!file_exists(dirname($newPath))) {
  mkdir(dirname($newPath), 0755, true);
  }
  // 覆盖写入文件(不存在自动创建)
  file_put_contents($newPath, $contents_after);
 } else {
  file_put_contents($v, $contents_after);
 }
 // 输出
 echo "{$v} 已转换<hr>";
 } else {
 $newPath = str_replace(THIS_PATH, THIS_PATH . DS . Cover, $v);
 if (Cover !== true && !file_exists($newPath)) {
  if (!file_exists(dirname($newPath))) {
  mkdir(dirname($newPath), 0755, true);
  }
  copy($v, $newPath);
  echo "{$v} 复制文件到新路径 {$newPath}<hr>";
 }
 }
}

功能

  • 自定义文件夹

  • 跳过本文件(同一文件夹)及新文件夹(多次转码)

  • 文件格式

  • 转换文件编码到新文件夹(推荐)或本文件

  • 复制无需转码文件到新文件夹

  • 注意

  • 暂未在Linux上测试

  • 只能转码文本文件

  • 相关免费学习推荐:php编程(视频)

    热心网友 时间:2022-04-06 02:33

    使用 iconv()函数
    string iconv ( string $in_charset , string $out_charset , string $str )
    iconv (原编码 , 转换后编码 , 转换后变量);

    例子:
    GB2312=>UTF-8

    $str = iconv("GB2312", "UTF-8", $str);

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com