file_put_contents 保存文件时乱码

tomcat让人抓狂,后台java写的一个应用程序生成的静态html居然是ANSI编码格式的文件,前台首页点击查看页面时直接乱码了…

使用新的tomcat、重新配置,然后放在webapp下重新弄,不使用Catalina/localhost的方式,依旧不行。。得,同事机器上可以跑,而且正常,就我机器跑不起来。因为要频繁更改模板文件,所以不太好用nginx反向代理到同事的机器上,最好能在本机跑..

所以决定用php把那些该死的乱码文件全部全部转一下编码再保存…

在使用file_put_contents的时候,遇到比较郁闷的问题,文件格式是对了,但里面却乱码了,后面想想,觉得应该是先删除文件再进行处理,试了一下,文件格式正确、内容正确。

在使用iconv函数时,先开始用gb2312->utf-8发现不行,部分字符串无法读入进去,然后抱着试试的心态,使用gbk->utf-8居然行了~ ~

---注:在转码前需要判定该文件编码格式是否为utf-8,如果为utf-8转码反而出错

花几分钟写的,有点乱,达到预期目标就成。

1: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

       2:  

       3: <?php

       4:     

       5:     function reSaveFile($path) {

       6:         

       7:         if (is_dir($path)) {

       8:             

       9:             if ($handle = opendir($path)) {

      10:                 while (($file = readdir($handle)) !== FALSE) {

      11:                     

      12:                     if ($file != "." && $file != "..") {

      13:                         $fileName = $path."/".$file;

      14:                         

      15:                         if (is_file($fileName) && preg_match("/.html$/", $file)) {

      16:                             echo "<div>正在处理文件:".$fileName."</div>";

      17:                             

      18:                             saveHandler($fileName);

      19:                         } else if (is_dir($fileName)) {

      20:                             echo "<div style='color:#406c99;'>文件夹".$fileName."</div>";

      21:                             

      22:                             reSaveFile($fileName);

      23:                         } else {

      24:                             echo "<div style='color:#f00;'>跳过的文件:".iconv("gbk", "utf-8", $fileName)."</div>";                            

      25:                         }

      26:                         

      27:                     }

      28:                     

      29:                 }

      30:                 

      31:                 closedir($path);

      32:             }

      33:             

      34:         } else {

      35:             echo "1";

      36:         }

      37:         

      38:     }

      39:     

      40:     function isUTF8($str) {

      41:         if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", "UTF-8"), "UTF-8", "UTF-32")) {

      42:             return true;

      43:         } else {

      44:             return false;

      45:         }

      46:     }

      47:     

      48:     function saveHandler($fileName) {

      49:         $mode = "r";

      50:         

      51:         $file_content = file_get_contents($fileName);

      52: //        $file_content = strip_tags($file_content);

      53:         

      54:         if (isUTF8($file_content)) {

      55:             echo "<div>跳过utf-8文件:".$fileName."</div>";

      56:             return ;

      57:         }

      58:         

      59:         $file_content = iconv("gbk", "utf-8", $file_content);

      60:         

      61:         if (file_exists($fileName)) {

      62:             unlink($fileName);

      63:         }

      64:         

      65:         file_put_contents($fileName, $file_content);

      66:         

      67:         echo "<a href='".$fileName."'>".$fileName."</a>保存成功";

      68:         

      69:         echo "<textarea>".$file_content."</textarea>";

      70:     }

      71:     

      72:     reSaveFile("C:/AEApps/application/GTJ_GW3");

      73: ?>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[下篇]

WCF客户端和服务端的框架体系相互协作,使得开发人员可以按照我们熟悉的方式进行异常的处理:在服务操作执行过程中抛出异常(FaultException),在调用服...

2029
来自专栏java思维导图

值得收藏!Redis五大数据类型应用场景(一)

Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数...

2614
来自专栏于晓飞的专栏

Android Proguard(混淆)

最近项目中遇到一些混淆相关的问题,由于之前对proguard了解不多,所以每次都是面向Stackoverflow的编程。copy别人的答案内心还可以接受,但是c...

6073
来自专栏GuZhenYin

浅析Entity Framework Core中的并发处理

前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework C...

5128
来自专栏nnngu

02 Java类的加载机制

1、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Cla...

3007
来自专栏LEo的网络日志

python技巧分享(九)

3546
来自专栏JMCui

MongoDB系列二(介绍).

一、特点     学习一个东西,至少首先得知道它能做什么?适合做什么?有什么优缺点吧?     传统关系型数据库,遵循三大范式。即原子性、唯一性、每列与主键直接...

2988
来自专栏逢魔安全实验室

基于python的自动化代码审计

新年马上到了,FormSec现在这里给大家拜年,祝大家狗年旺财! 当然新年礼物已经给大家备好了:《基于python的自动化代码审计》 本文通过介绍在...

4266
来自专栏java一日一条

有了 GC 还会不会发生内存泄漏?

这个问题是我在写C++时考虑到的,C++需要手动管理内存,虽然现在标准库中提供了一些智能指针,可以实现基于引用计数的自动内存管理,但现实环境是很复杂的,我们仍要...

653
来自专栏顶级程序员

死磕 Java 并发 :Java 内存模型之 happens-before

来源:chenssy, cmsblogs.com/?p=2102 那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见? 我们无法就所有场景...

3915

扫码关注云+社区

领取腾讯云代金券