我想知道 如何 用php  转换 一个 文件的 编码格式。。
目前 我知道 了 转换 BOM 格式的 utf-8的方法
但是 我想知道 如果 将其 变成 普通的utf-8就是 不含3个字节 那种
希望大家 多帮帮忙。。

解决方案 »

  1.   

    <?php
    $dir = "files";//文件夹目录
    if (isset ( $dir)) { 
    $basedir = $dir;
    } else {
    $basedir = '.';
    }
    $auto = 1;
    checkdir ( $basedir );function checkdir($basedir) {
        if ($dh = opendir ( $basedir )) {
        while ( ($file = readdir ( $dh )) !== false ) {
            if ($file != '.' && $file != '..') {
                if (! is_dir ( $basedir . "/" . $file )) { // 如果是文件
                    echo "filename: $basedir/$file " . checkBOM ( "$basedir/$file" ) . " <br>";
                } else {
                $dirname = $basedir . "/" .$file; // 如果是目录
                checkdir ( $dirname ); // 递归
                }
            }
        }
        closedir ( $dh );
        }
    }function checkBOM($filename) {
    global $auto;
    $contents = file_get_contents ( $filename );
    $charset [1] = substr ( $contents, 0, 1 );
    $charset [2] = substr ( $contents, 1, 1 );
    $charset [3] = substr ( $contents, 2, 1 );
    if (ord ( $charset [1] ) == 239 && ord ( $charset [2] ) == 187 && ord ( $charset [3] ) == 191) { // BOM 的前三个字符的ASCII 码分别为 239 187 191
        if ($auto == 1) {
          $rest = substr ( $contents, 3 );
          rewrite ( $filename, $rest );
          return ("<font color=red>BOM found, automatically removed.</font>");
        } else {
          return ("<font color=red>BOM found.</font>");
        }
    } else
        return ("BOM Not Found.");
    }function rewrite($filename, $data) {
    $filenum = fopen ( $filename, "w" );
    flock ( $filenum, LOCK_EX );
    fwrite ( $filenum, $data );
    fclose ( $filenum );
    }
    ?>
      

  2.   


    不含3个字节....你的意思是仅含ascii字符??
      

  3.   

    二楼的 方法 我试过。。
    文件 中 的 \xEF\xBB\xBF 这三个 是 BOM的 utf-8默认 的 字节
    我 试着去掉它的 时候 他会变成 gbk 编码格式。。
      

  4.   

    直接把文件以流的形式读入,再用header头设置一下,看看是不是你要的格式。
      

  5.   

    5楼的 方法 我也试过了 也是不行。。
    我 生成 xml 的 utf-8 文件 可以 
    但是 生成 php的 还会变成 gbk
    我 试着 把 utf-8的 xml  用copy 函数 变成 php 
    但是变成php文件后 编码 就成了 gbk
    我也尝试了 用替换函数 去掉 BOM的utf-8中的 \xEF\xBB\xBF 可是 这样的话 文件还是会变成 gbk
    我最后 想 用自动下载的方式把文件头 输出为 application/php 并且 编码 改成 utf-8 但是 目前 自动下载没能实现
      

  6.   

    to 6楼,把你的代码整理一下,帖出来看看有什么问题。...理解不了为什么生成php就会变gbk
      

  7.   


    function writefile($filename, $str)
    {
    if (!$fp = fopen($filename, 'w+'))
    {
    echo "打开文件".$filename."失败<br>";
    exit;
    }
    if(fwrite($fp, utf8_encode($str)) === FALSE)
    {
    echo $filename."文件不能被写入<br>";
    exit;
    }
    echo "转换".$filename."成功!<br>";
    fclose($fp);
    }
    writefile('test.txt',"测试文件");
    writefile('test.xml',"测试文件");这段代码 生成的 xml文件 是 utf-8格式的
    生成的 txt文件 是 gbk格式的。。
    我试了 好几次 貌似 只有 xml是utf-8
      

  8.   

    我用你的代码分别测试生成base64和utf8文件都正常,
      

  9.   

    原来 是我 easyEclipse的 问题
    那个开发工具 给我字段把文本文件转成 gbk了
    郁闷
    谢谢楼上