BOM 문자 ufeff가 PHP에 나타나고, PHP는 이상한 BOM ufeff를 제거합니다.

WBOY
풀어 주다: 2016-08-08 09:24:51
원래의
1593명이 탐색했습니다.

PHP 프로젝트를 조사하던 중 오늘 갑자기 프로젝트가 열리지 않습니다.

며칠 전 Chrome으로 Response의 내용을 살펴보니 AJAX 페이지와 일반 HTML 페이지의 내용 앞에 빨간 점이 있었습니다.

마우스를 위로 올리면 "ufeff"라는 메시지가 표시됩니다.

바이두에서 찾아보니 BOM 캐릭터네요.

며칠 전에는 괜찮았는데 오늘 일부 콘텐츠가 교체되었기 때문일까요?

인터넷에서 PHP 프로그램을 찾아 모든 파일을 스캔하고 BOM 문자를 제거했습니다.

젠장 기준이 왜 이렇게 다양해?

코드:

<?php
header('content-Type: text/html; charset=utf-8');
if(isset($_GET['dir'])){ //设置文件目录,如果没有设置,则自动设置为当前文件所在目录
    $basedir=$_GET['dir'];
}else{
    $basedir='.';
}
$auto=1;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/

echo '当前查找的目录为:'.$basedir.'当前的设置是:';
echo $auto?'检测文件BOM同时去除检测到BOM文件的BOM<br />':'只检测文件BOM不执行去除BOM操作<br />';

checkdir($basedir);
function checkdir($basedir){
    if($dh=opendir($basedir)){
        while (($file=readdir($dh)) !== false){
            if($file != '.' && $file != '..'){
                if(!is_dir($basedir.'/'.$file)){
                    echo '文件: '.$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并已自动去除</font>');
        }else{
            return (' <font color=red>找到BOM</font>');
        }
    }else{
        return (' 没有找到BOM');
    }
}
function rewrite($filename,$data){
    $filenum=fopen($filename,'w');
    flock($filenum,LOCK_EX);
    fwrite($filenum,$data);
    fclose($filenum);
}
?>
로그인 후 복사

코드 출처: http://www.douban.com/note/332229277/

위 내용은 PHP에서 BOM 문자 ufeff가 발생하는 방법과, PHP에서 이상한 BOM ufeff를 제거하는 방법을 관련 내용을 포함하여 소개한 내용이 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿