当前位置: 首页 > news >正文

PHP批量去除Bom头的方法

检查的代码:

<?php

$dir = __DIR__;
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));

foreach ($files as $file) {
    if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
        $content = file_get_contents($file->getPathname());
        if (substr($content, 0, 3) === "\xEF\xBB\xBF") {
            echo "BOM found in: " . $file->getPathname() . "\n";
        } else {
            echo "No BOM in: " . $file->getPathname() . "\n";
        }
    }
}

批量去除Bom头的代码:

<?php



$dir = __DIR__; // 当前目录
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));

foreach ($files as $file) {
    if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
        echo "Checking: " . $file->getPathname() . "\n"; // 打印正在处理的文件
        $content = file_get_contents($file->getPathname());
        if (substr($content, 0, 3) === "\xEF\xBB\xBF") {
            $content = substr($content, 3);
            file_put_contents($file->getPathname(), $content);
            echo "Removed BOM from: " . $file->getPathname() . "\n";
        }
    }
}

但是最后的方法是:

xxd index3.php | head -n 1

发现没有bom头,用PHPStorm右下角的 CR utf-8 改成  CRLF utf-8 就好了。

为什么呢?

CRLF(\r\n):Windows 默认的换行符,两个字符 0x0D 0x0A
CR(\r):旧版 macOS 使用的换行符,单个 0x0D
LF(\n):Linux/macOS 默认的换行符,单个 0x0A

换行格式符号ASCII 码操作系统
LF(换行 Line Feed)\n0x0ALinux、macOS(新版本)
CR(回车 Carriage Return)\r0x0D旧版 macOS(Mac OS 9 及更早)
CRLF(回车+换行)\r\n0x0D 0x0AWindows
格式适用系统影响
CRLF UTF-8WindowsWindows 兼容,Linux 可能会有 ^M 问题
CR UTF-8旧版 macOSLinux 解析可能出错,现代系统不推荐
LF UTF-8Linux/macOS适用于 PHP / Shell / Linux 服务器

http://www.dtcms.com/a/67546.html

相关文章:

  • Linux——进程(2)进程的状态
  • 《ECharts :不强不大,做点可视化》
  • AI本地部署
  • Flutter 按钮组件 TextButton 详解
  • 《探秘人工智能与鸿蒙系统集成开发的硬件基石》
  • 重生之我在学Vue--第12天 Vue 3 性能优化实战指南
  • VMWare中的三种网络模式
  • 框架_C语言_数据包解析代码框架
  • 【后端】【django】导出 API 文档的几种方法
  • JavaScript 中的Map
  • LeetCode 112. 路径总和 II java题解
  • CSS的学习
  • QuickAPI 和 DBAPI 谁更香?SQL生成API工具的硬核对比(一)
  • 学习路之TP6 --重写vendor目录下的文件(新建命令)
  • CODESYS RTE之安装及使用的注意事项
  • MySQL创建存储过程报错
  • G-Star 公益行起航,挥动开源技术点亮公益!
  • Java --- 根据身份证号计算年龄
  • 【CXX】6.1 String — rust::String
  • 鸿蒙app 开发 高效的 存储 数据 推荐使用 @tencent/mmkv(V2.1.0):
  • JavaScript语言的区块链隐私
  • 【经验分享】SpringBoot集成Websocket开发 之 使用由 Jakarta EE 规范提供的 API开发
  • READ-COMMITTED事务隔离级别下的先插后查问题记录
  • 谷歌Gemini 2.0 Flash放出原生多模态图像生成功能:支持多轮对话式实时编辑,附最新尝鲜方式
  • 【算法】DFS、BFS、拓扑排序
  • Unity引擎架构介绍及代码示例
  • 网络安全设备系统集成方案 系统集成和网络安全
  • petalinux环境下给linux-xlnx源码打补丁
  • 重学vue3:vue3组件通信的几种方法
  • OpenAI新工具助力开发者:AI智能体自动任务创建的艺术