搜 索

php代码批量去除windows系统文本工具修改文件后产生的bom信息

编辑:QTOOL.NET日期:2021-01-20378

在网站程序员维护或制作网页的时候,有时候为了方便,会直接右键打开方式直接使用windows自带的记事本来编辑html或php网页文件.

往往修改后会出现页面错位、php运行出错等情况,这是因为win的记事本在保存UTF-8编码的文件时,会自动为修改的文件开头加上隐藏的十六进制0xefbbbf字符。

去除的方法有很多,可以用各种编辑器软件来去除bom也可以使用程序代码直接去除bom.

如:使用较为常见的网页编辑软件dw,即dreamweaver软件

首先用dw打开带有bom信息的文件,然后在菜单栏选择页面属性,找到标题编码选项,将包括Unicode签名(BOM)前面的勾去掉,然后确定保存即可。

或者使用文本编辑器Editplus,选择工具选项,然后找到首选项,选中文件,将UTF-8标识,选择设置为总是删除签名,然后保存即可。

也可以在Linux系统中直接去除bom信息

find  . -type f -exec sed -i 's/\xEF\xBB\xBF//'  {}  \;

使用vim来快速去除bom头

:set encoding=utf-8

:set nobomb

当然,我们也可以使用网页程序来实现,这里以php为例:

<?php

$wenjianjia = "."; //指定目录,.表示当前目录  

if ( $wjarr = opendir( $wenjianjia ) ) { //打开目录句柄

  while ( ( $mlwj = readdir( $wjarr ) ) !== false ) { //读取目录内容

    if ( !is_dir( $wenjianjia . "/" . $mlwj ) ) {

      echo "文件名: $mlwj " . bomclean( "$wenjianjia/$mlwj" ) . "<br>";

    }

  }

  closedir( $wjarr ); //释放目录句柄

}

function bomclean( $mlwjname ) {

  $wjnr = file_get_contents( $mlwjname ); //读取文件

$checkzf=array();

  $checkzf[] = substr( $wjnr, 0, 1 );//第一个字符

  $checkzf[] = substr( $wjnr, 1, 1 );//第二个字符

  $checkzf[] = substr( $wjnr, 2, 1 );//第三个字符

  if ( ord( $checkzf[ 2 ] ) == 191 && ord( $checkzf[ 1 ] ) == 187 && ord( $checkzf[ 0 ] ) == 239 ) { //判断ASCII值

    $quchu = substr( $wjnr, 3 ); //去除

    $mlwjnum = fopen( $mlwjname, "w" );//打开文件

    flock( $mlwjnum, LOCK_EX );

    fwrite( $mlwjnum, $quchu );//写入文件

    fclose( $mlwjnum );

    $xtreturn = "已成功删除BOM信息";

  } else {

    $xtreturn = "该文件没有bom信息";

  }

  return $xtreturn;


}

?>

通过以上代码就简单的实现了一个功能为去除bom信息的小工具,它可以去除该文件目录下所有用windows系统自带的记事本修改、保存所产生的bom信息。

TAG标签:字符处理
此文章由QTOOL.NET编辑
最新文章

热门标签