Home  >  Article  >  Backend Development  >  How to remove BOM with PHP

How to remove BOM with PHP

藏色散人
藏色散人Original
2020-07-06 09:33:421988browse

PHP method to remove BOM: First create a PHP code file; then set the file directory; then define a "checkdir" and "checkBOM" method; finally put this code file in the root directory and run it .

How to remove BOM with PHP

/* 
 +------------------------------------------------------------------------------------------- 
 + Title        : 去掉BOM头方法 
 + Author       : hello_sgw 
 + Version      : V1.0.0.1 
 + Initial-Time : 2017-08-12 15:18
 + Last-time    : 2017-08-12 16:01
 + Desc         : 
 +------------------------------------------------------------------------------------------- 
*/

When I called the interface, because I used the encapsulation method provided by the other party, an error kept showing when outputting a set of data. Finally, I thought that maybe the other party had given The method contains encoding issues (with BOM header), so I searched online for a method to detect BOM and can remove it and regenerate a new file. After using it, the data can be displayed normally.

What is the BOM header?

BOM --Byte Order Mark,中文名译作“字节顺序标记”,在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,
现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了。

Solution:

# The code here is a PHP method to remove the BOM information of all files in the current directory and subdirectory. Just put this code file in the root directory, and then browser Just run the visit

<?php
if (isset($_GET[&#39;dir&#39;])) { //设置文件目录 
  $basedir = $_GET[&#39;dir&#39;];
} else {
  $basedir = &#39;.&#39;;
}
 
$auto = 1;
checkdir($basedir);
 
function checkdir($basedir)
{
  if ($dh = opendir($basedir)) {
    while (($file = readdir($dh)) !== false) {
      if ($file != &#39;.&#39; && $file != &#39;..&#39;) {
        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=&#39;red&#39;>BOM found, automatically removed.</font>");
    } else {
      return ("<font color=&#39;red&#39;>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);
}

For a lot of related knowledge, please visit PHP Chinese website!

The above is the detailed content of How to remove BOM with PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn