>  기사  >  백엔드 개발  >  PHP 코드에서 bom을 제거하는 방법

PHP 코드에서 bom을 제거하는 방법

藏色散人
藏色散人원래의
2022-10-20 09:29:331801검색

PHP 코드에서 BOM을 제거하는 방법: 1. "functionclearbom($contents){...}" 메서드를 사용하여 텍스트에서 BOM 헤더를 제거합니다. 2. "function checkBOM($filename) {을 사용합니다. ..}" 방법 BOM 헤더를 감지하고 제거합니다. 3. "function SearchBOM($string) {...}" 방법을 사용하여 현재 파일에 BOM이 있는지 검색하고 제거합니다.

PHP 코드에서 bom을 제거하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, PHP 버전 8.1, Dell G3 컴퓨터.

PHP 코드에서 BOM을 제거하는 방법은 무엇입니까?

PHP는 UTF8 형식 파일에서 BOM 헤더를 일괄 제거합니다.

저는 종종 txt 텍스트 편집기를 사용하여 PHP 파일을 작성하기 때문에 BOM 헤더가 자동으로 추가되는 경우가 많습니다. 이로 인해 세션이 작동하지 않거나 쿠키가 작동하지 않는 등의 문제가 자주 발생합니다. 설정 및 기타 문제.

아래에서는 PHP 프로그램을 사용하여 utf8 형식 파일의 BOM 헤더를 지우는 여러 가지 방법을 컴파일했습니다.

예제 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);
}

예제 2

BOM 파일이 포함된 형식을 서명되지 않은 UTF-8 형식의 파일로 변환하는 방법은 무엇인가요? PHP 코드를 공유하겠습니다.

코드는 다음과 같습니다.

<?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);
}
//结束
?>

예제 3

은 모든 하위 디렉터리와 파일을 자동으로 검색합니다.

코드는 다음과 같습니다.

<?php
// 设定你要清除BOM的根目录(会自动扫描所有子目录和文件)
$HOME = dirname(__FILE__);
// 如果是Windows系统,修改为:$WIN = 1;
$WIN = 0;
?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.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>’;
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 비디오 자습서 "

위 내용은 PHP 코드에서 bom을 제거하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.