>백엔드 개발 >PHP 튜토리얼 >PHP는 UTF-8 파일 BOM 자동 감지 및 제거 example_php 기술을 구현합니다.

PHP는 UTF-8 파일 BOM 자동 감지 및 제거 example_php 기술을 구현합니다.

WBOY
WBOY원래의
2016-05-16 20:32:501035검색

이 문서의 예에서는 PHP에서 UTF-8 파일 BOM의 자동 감지 및 제거를 구현하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 구현 방법은 다음과 같습니다.

BOM 정보는 파일 시작 부분에 숨겨진 문자열로, 일부 편집자는 이 파일이 UTF-8로 인코딩된 파일임을 인식하는 데 사용됩니다. 그러나 PHP는 파일을 읽을 때 이러한 문자를 읽으므로 파일 시작 부분에 인식할 수 없는 문자가 포함되어 있는 문제가 발생합니다.

예를 들어 이미지를 생성하는 PHP 파일을 UTF-8 형식으로 저장하면 파일 헤더에 숨겨진 BOM 정보도 함께 배포되기 때문에 생성된 이미지 데이터가 올바르지 않아 브라우저에서 인식할 수 없습니다.

UTF-8 파일에 BOM 정보가 포함되어 있는지 확인하려면 파일 시작 부분의 세 문자가 0xEF, 0xBB, 0xBF인지 확인하면 됩니다. 다음 작은 프로그램에서 사용자는 특정 디렉터리의 모든 파일을 탐색하여 BOM이 추가되었는지 여부를 감지합니다.

코드 복사 코드는 다음과 같습니다.
//이 파일은 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 "파일 이름: $file ".checkBOM("$basedir/$file" )."
";
}
closeir($dh);
}

함수 checkBOM($filename) {
글로벌 $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);
다시 쓰기($filename, $rest);
return("BOM을 찾았으며 자동으로 제거되었습니다.");
} 그 밖의 {
return ("BOM을 찾았습니다.");
}
}
그렇지 않으면 반환("BOM을 찾을 수 없습니다.");
}

함수 재작성($filename, $data) {
$filenum=fopen($filename,"w");
무리($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}


위 코드를 del_bom.php로 저장하고, 감지할 디렉터리를 수정한 후 실행해 보세요. 이는 모든 페이지 시작 부분에 공백을 발생시키는 BOM 정보가 포함된 파일을 검색하는 데 도움이 될 수 있습니다.

다음 코드를 bom.php로 저장하세요. utf8 형식으로 저장하세요

코드 복사 코드는 다음과 같습니다.

디렉터리에서 탐지 결과


//이 파일은 UTF8로 인코딩된 파일에 BOM이 추가되어 자동으로 제거될 수 있는지 빠르게 테스트하는 데 사용됩니다.
//밥보스 지음
//풍음수정
$directory = str_replace(" ", "|", $_POST["dir"]);//제출된 경로 데이터 수락
$basedir="$directory"; //이 동작을 감지해야 하는 디렉터리를 수정합니다. 점은 현재 디렉터리를 나타냅니다.
$auto=1; //검색된 BOM 정보를 자동으로 제거할지 여부. 1은 예, 0은 아니오를 의미합니다.
//다음은 변경할 필요가 없습니다
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "파일 이름: $file ".checkBOM("$basedir/$file" )."
";
}
closeir($dh);
}
함수 checkBOM($filename) {
글로벌 $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);
다시 쓰기($filename, $rest);
return ("--Bom이 삭제되었습니다.");
} 그 밖의 {
return ("--Bom을 찾았습니다.");
}
}
그렇지 않으면 return ("--No Bom.");
}
함수 재작성($filename, $data) {
$filenum=fopen($filename,"w");
무리($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}
?>


디렉터리:


Plugin/fanfou 등의 폴더 이름을 입력해 주세요. 뒤에 /를 추가할 필요는 없습니다. 루트 디렉터리를 검색하려면 "."을 입력하고
을 제출하면 됩니다.

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

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