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

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.kler.cn/a/584442.html

相关文章:

  • JVM崩溃时产生的文件 hs_err.pid.log
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案
  • 3D匹配算法简述
  • Stable Diffusion F.1模型全面解析
  • 【MyBatis Plus 逻辑删除详解】
  • YOLOv8模型改进 第三十二讲 添加Transformer Self Attention TSA 解决CNN过程中特征丢失的问题
  • 问deepseek: OpenFOAM并行分区后,是如何实现ldumatrix矩阵向量乘法计算逻辑的?
  • 基于PyTorch的深度学习4——使用numpy实现机器学习vs使用Tensor及Antograd实现机器学习
  • LuaJIT 学习(2)—— 使用 FFI 库的几个例子
  • SpringBoot3+Lombok如何配置logback输出日志到文件
  • 深入解析 React 最新特性:革新、应用与最佳实践
  • 若依框架二次开发——若依微服务打包时如何分离 JAR 包和资源文件
  • 基于传统算法的半导体晶圆缺陷检测原理及代码(二)
  • Spring中的配置文件参数化与类型转换器实现详解
  • Maven 构建 项目测试
  • Qt常用控件之垂直布局QVBoxLayout
  • Leetcode9-回文数
  • 解决:外部调用存储过程时突然变慢,但是在sql server运行很快
  • ChromeOS 134 版本更新
  • 专业视角:set 和 multiset的原理与应用解析