PHP 去掉 utf8格式文件中的bom头部
我们有时要去掉utf8文档中头部我们经常会需要手工清除了,下面我整理了几个利用php程序清除 utf8格式文件中的bom头部方法.
PHP实例1,代码如下:
/** * 去掉文件中的 bom头 * @var 0.1 * @author Chenwp */ function clearbom( $contents ){ //UTF8 去掉文本中的 bom头 $BOM = chr (239). chr (187). chr (191); return str_replace ( $BOM , '' , $contents ); } /** * 去掉文件中的bom头 * @param object $fileName Description * @return object Description */ function clearfilebom( $fileName ){ $c = file_get_contents ( $fileName ); $c = clearbom( $c ); file_put_contents ( $fileName , $c ); }PHP实例例2,代码如下:
<?php //此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除 $basedir = "." ; //修改此行为需要检测的目录,点表示当前目录 $auto =1; //是否自动移除发现的BOM信息。1为是,0为否。 //以下不用改动 if ( $dh = opendir( $basedir )) { while (( $file = readdir( $dh )) !== false) { if ( $file != '.' && $file != '..' && ! is_dir ( $basedir . "/" . $file )) echo "filename: $file " .checkBOM( "$basedir/$file" ). " <br>" ; } 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) { 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 ); } //结束 ?>PHP实例3,代码如下:
<?php // 设定你要清除BOM的根目录(会自动扫描所有子目录和文件) $HOME = dirname( __FILE__ ); // 如果是Windows系统,修改为:$WIN = 1; $WIN = 0; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://HdhCmsTestw3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > <html xmlns= "http://HdhCmsTestw3.org/1999/xhtml" > <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <title>UTF8 BOM 清除器</title> <style> body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; } .FOUND { color: #F30; font-size: 14px; font-weight: bold; } </style> </head> <body> <?php $BOMBED = array (); RecursiveFolder( $HOME ); echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">' ; foreach ( $BOMBED as $utf ) { echo $utf . "<br />n" ; } echo '</p>' ; // 递归扫描 function RecursiveFolder( $sHOME ) { global $BOMBED , $WIN ; $win32 = ( $WIN == 1) ? "\" : " /"; $folder = dir( $sHOME ); $foundfolders = array (); while ( $file = $folder ->read()) { if ( $file != "." and $file != ".." ) { if ( filetype ( $sHOME . $win32 . $file ) == "dir" ){ $foundfolders [ count ( $foundfolders )] = $sHOME . $win32 . $file ; } else { $content = file_get_contents ( $sHOME . $win32 . $file ); $BOM = SearchBOM( $content ); if ( $BOM ) { $BOMBED [ count ( $BOMBED )] = $sHOME . $win32 . $file ; // 移出BOM信息 $content = substr ( $content ,3); // 写回到原始文件 file_put_contents ( $sHOME . $win32 . $file , $content ); } } } } $folder ->close(); if ( count ( $foundfolders ) > 0) { foreach ( $foundfolders as $folder ) { RecursiveFolder( $folder , $win32 ); } } } // 搜索当前文件是否有BOM function SearchBOM( $string ) { if ( substr ( $string ,0,3) == pack( "CCC" ,0xef,0xbb,0xbf)) return true; return false; } ?> </body> </html>查看更多关于PHP 去掉 utf8格式文件中的bom头部 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30139