> 백엔드 개발 > PHP 튜토리얼 > php_php 팁의 보이지 않는 문자 65279(utf-8의 BOM 헤더) 문제

php_php 팁의 보이지 않는 문자 65279(utf-8의 BOM 헤더) 문제

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-05-16 20:38:30
원래의
1089명이 탐색했습니다.

오늘 CSDN에서 PHP에서 보이지 않는 공백 문자 65279를 출력하는 데 문제가 있는 것을 보았습니다. 인터넷에서 찾아보니 65279 문자가 PHP에서 파일을 UTF-8로 인코딩된 것으로 표시하는 데 사용되는 것을 발견했습니다. 클라이언트에 함께 출력되므로 ajax를 사용하여 반환 값을 가져올 때 클라이언트가 문자열을 일치시킬 수 없게 됩니다.

php 보이지 않는 문자 65279는 다음과 같이 설명됩니다.

UTF-8로 인코딩된 파일은 BOM 없음과 BOM의 두 가지 형식으로 나눌 수 있습니다.

BOM이란?

 "EF BB BF" 이 3바이트를 BOM이라고 하며, 전체 이름은 "Byte Order Mard"입니다. BOM은 일반적으로 utf8 파일에서 파일이 UTF-8 파일임을 나타내기 위해 사용되며 BOM의 원래 의도는 utf16에서 사용되는 것입니다.

PHP에서 UTF-8 파일을 출력하면 BOM도 출력되기 때문에 PHP에서 UTF-8을 사용하려면 BOM 헤더가 없는 UTF-8 파일을 사용해야 합니다.

일반적으로 사용되는 텍스트 편집 소프트웨어는 UTF-8 파일을 저장하는 다양한 방법을 지원하므로 사용할 때 특히 주의해야 합니다.

예:

1. ultraedit를 사용할 때 저장 시 "UTF-8"과 "UTF-8 - BOM 없음"이라는 두 가지 옵션이 있습니다.
2. 창의 메모장에서 파일을 BOM과 함께 저장합니다.
3. EditPlus 소프트웨어 버전에 따라 UTF-8 저장에 대한 지원이 다릅니다. 예를 들어 버전 2.31은 BOM 없이 저장하고 버전 2.11은 BOM과 함께 저장합니다.

utf-8 파일 헤더를 제거하는 방법:

1. ultraedit를 사용하여 "UTF-8 - BOM 없음"으로 저장합니다.
2. 사이트의 루트 디렉토리에서 실행되는 매우 유용한 PHP 프로그램은 디렉토리에 있는 모든 UTF-8 파일의 BOM 헤더를 제거합니다.

//remove the utf-8 boms 
 //by magicbug at gmail dot com 
  
 if (isset($_GET['dir'])){ //config the basedir 
   $basedir=$_GET['dir']; 
 }else{ 
   $basedir = '.'; 
 } 
  
 $auto = 1; 
  
 checkdir($basedir); 
  
 function checkdir($basedir){ 
   if ($dh = opendir($basedir)) { 
     while (($file = readdir($dh)) !== false) { 
       if ($file != '.' && $file != '..'){ 
         if (!is_dir($basedir."/".$file)) { 
           echo "filename
 $basedir/$file ".checkBOM("$basedir/$file")." <br>"; 
         }else{ 
           $dirname = $basedir."/".$file; 
           checkdir($dirname); 
         } 
       } 
     } 
   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); 
} 
로그인 후 복사
관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿