->
前几天我终于把困扰已久的主题变形问题解决了,并最终判断是utf8惹得祸。
当时我是打开每个文件,检查编码,如果不对的就另存为正确的编码。不过这样十分麻烦,而是浪费时间。好在要处理的文件不多,而且是一次性操作,也就没管了。
今天看到一段不错的php程序,可以自动把你所有的文件的BOM去掉,而这全部过程只需要上传并运行一下,非常不错,保留下来方便下次使用。
另外,对于ultraedit的用户来说,可以在ultraedit.ini中修改一下设置,这样就不用每次都特别留意这个问题了。
Write UTF-8 BOM=0
Write UTF-8 BOM NF=0
这段php程序如下,保存成php文件放在根目录中执行一次就行了,会自动去除文件头中的BOM。
1: <?php
2: //remove the utf-8 boms
3: //by magicbug at gmail dot com
4:
5: if (isset($_GET['dir'])){ //config the basedir
6: $basedir=$_GET['dir'];
7: }else{
8: $basedir = '.';
9: }
10:
11: $auto = 1;
12:
13: checkdir($basedir);
14:
15: function checkdir($basedir){
16: if ($dh = opendir($basedir)) {
17: while (($file = readdir($dh)) !== false) {
18: if ($file != '.' && $file != '..'){
19: if (!is_dir($basedir."/".$file)) {
20: echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
21: }else{
22: $dirname = $basedir."/".$file;
23: checkdir($dirname);
24: }
25: }
26: }
27: closedir($dh);
28: }
29: }
30:
31: function checkBOM ($filename) {
32: global $auto;
33: $contents = file_get_contents($filename);
34: $charset[1] = substr($contents, 0, 1);
35: $charset[2] = substr($contents, 1, 1);
36: $charset[3] = substr($contents, 2, 1);
37: if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
38: if ($auto == 1) {
39: $rest = substr($contents, 3);
40: rewrite ($filename, $rest);
41: return ("<font color=red>BOM found, automatically removed.</font>");
42: } else {
43: return ("<font color=red>BOM found.</font>");
44: }
45: }
46: else return ("BOM Not Found.");
47: }
48:
49: function rewrite ($filename, $data) {
50: $filenum = fopen($filename, "w");
51: flock($filenum, LOCK_EX);
52: fwrite($filenum, $data);
53: fclose($filenum);
54: }
55: ?>
这里有保存好的php文件,下载回来直接用就可以了。
PS:首次在WLW中用Code Snippet插入代码,看看效果如何。没有PHP类型选,只能选了一个相近的类型高亮代码。
Popularity: 18%




















其实就是去掉文件的头三个字节而已
回复
Black-Xstar 在 2008-05-06 11:47 下午 回复:

原理我知道啊。
我不介意你用其它语言重写一遍并编译成可执行文件……
别忘了在我这里首发啊。
回复
寒, 写php自然要去掉bom,常识话题了-_-,没啥必要单独个程序来作,啥编辑器都有,除了windows的
另外这程序效率好差,既然是有了fopen,就不该还有一个file_get_contents,
就一个fopen,用读写方式而不是用单纯的写方式,
操作一个文件还要加载两次,这效率-_-
回复
Black-Xstar 在 2008-05-07 1:20 下午 回复:

唉,我是刚刚接触这些方面,所以很多东西不懂。
正在努力学习呢……
PS:你的blog居然还要注册,而且当我尝试注册老说验证码错误。
回复
MoontoC 在 2008-05-08 7:11 上午 回复:

需要注册是早期的从DH搬到国内服务器之后发现spam这样作的,现在貌似没必要了,不过验证码错误你可能是没把画面往下拉吧,验证码写在最下面的,,
不过无所谓,我把验证码去掉了,也开放了,不注册也可以评论了,反正评论本身就是不计数的
回复
Black-Xstar 在 2008-05-08 12:29 下午 回复:

我看到了验证码,绝对正确输入了……
如果涉及的php文件比较多的话,这段php代码还是有些用处的。
回复