• 技术文章 >后端开发 >PHP问题

    php 代码怎么去掉bom

    藏色散人藏色散人2022-10-20 09:29:33原创190

    php代码掉bom的方法:1、使用“function clearbom($contents){...}”方式去掉文本中的bom头;2、通过“function checkBOM ($filename) {...}”方法检测并去掉bom头;3、通过“function SearchBOM($string) {...}”方法搜索当前文件是否有BOM并去除即可。

    php入门到就业线上直播课:进入学习

    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。

    php 代码怎么去掉bom?

    PHP批量去掉utf8格式文件中的bom头部

    我经常使用txt文本编辑器写php文件,所以经常会自动添加bom头部,导致在很多时候会带来问题,比如我们session无法工作、cookie无法设置等等问题。

    下面我整理了几个利用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核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:bom php
    上一篇:ubtunu中php不解析怎么办 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• php怎么清除bom头• php bom 中文乱码怎么办• node中是否包含dom和bom• BOM浏览器对象模型整理解析• BOM核心之window对象(总结分享)
    1/1

    PHP中文网