精华内容
下载资源
问答
  • BOM头
    2021-05-08 16:51:45

    这篇文章主要为大家详细介绍了php BOM头检查简单示例,具有一定的参考价值,可以用来参考一下。

    对php BOM头检查简单示例感兴趣的小伙伴,下面一起跟随512笔记的小编巴闭妹来看看吧!

    /**

    *

    * @param

    * @arrange (512.笔记) www.512pic.com

    **/

    /**

    *to do 用于检查BOM头

    *@param string $url

    *@return boolean

    */

    //检查BOM头

    public function checkBom($contents) {

    $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) {

    return substr($contents,3);

    }

    return $contents;

    }

    注:关于php BOM头检查简单示例的内容就先介绍到这里,更多相关文章的可以留意512笔记的其他信息。

    关键词:

    您可能感兴趣的文章

    更多相关内容
  • 什么是BOM头?如何去除文件中的BOM头 删除文件中的BOM头,使文件变成正常的UTF8文件
  • 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因...
  • PHP项目bom头清除

    2021-09-14 10:35:54
    PHP项目全站代码扫描Bom头清除,防止Bom头存在造成的各种奇葩bug,已存在的Bom头问题也可修复。使用方法:复制文件到站点根目录,浏览器访问“域名/Eliminatebom.php”,等待页面显示的进度完成即可。
  • 什么是BOM头,如何去掉BOM头.zip
  • 首先弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark)。不仅限于 记事本保存的文件,...
  • 主要介绍了PHP批量去除BOM头内容信息代码的相关资料,需要的朋友可以参考下
  • 因为文件头信息输出BOM头信息,有时会对程序的执行结果造成影响,那么此时即应对这些文件的BOM信息进行去除
  • 去除BOM头小工具.rar

    2019-06-19 17:16:13
    能够批量对文件夹下的代码文件去除UTF-8 BOM头,还能对ASNI文件批量转换为UTF-8
  • PHP删除bom头方法实例

    2018-12-27 17:16:55
    PHP代码删除指定文件夹下所有文件的bom头,用于解决因为文件包含bom头导致的不必要问题。
  • 主要介绍了PHP批量删除、清除UTF-8文件BOM头的代码实例,需要的朋友可以参考下
  • UTF-8去BOM头工具

    2016-10-15 20:06:34
    我对之前的去BOM工具和需要的DLL进行了整合
  • php 删除bom头工具

    2019-04-18 09:28:13
    php 删除bom头工具 获取路径删除bom头
  • File.ReadAllText明确传入编码格式时会处理BOM头,返回的字符串不会有问题 File.WriteAllText明确传入编码格式时会处理BOM头,写入的文件不会有问题(带BOM头) File.ReadAllText和File.WriteAllText明确传入编码...

    软件安装

    1. 需要安装Notepad++(或SublineText)等相关软件查看或修改编码格式,方便学习。
    2. 本文使用的是Notepad++

    GB2312的局限性

    1. GB是"国标"二字的拼音简称,GB2312是最早的国标码。
    2. GB2312里面收录了6763个汉字,其中一级汉字3755个,二级汉字3008个,同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。
    3. GB2312收录的6763个汉字是简体中文,不是繁体中文,能够表示日常用语,而某些古诗文则不能用GB2312来表示。
    4. 从上面第二条对GB2312的定义可以看出,GB2312的编码表里面没有阿拉伯文,没有希腊文,没有北欧系文字,连中国的繁体文字都是没有的。
    5. 后来诞生了GBK,GB18030等编码。和GB2312的主要区别就是收录的汉字更多了,例如GBK总共收录了21003个汉字、883个符号,并将简体和繁体融于一库。
    6. 结论:GB2312不能用于游戏项目多国语言配置表工作。

    Unicode简介

    1. Unicode又称统一码、万国码、单一码。是一种国际标准
    2. Unicode每个字符占4个字节
    3. 由于Unicode每个字符占4个字节,太浪费存储空间了,因此诞生了4种编码方式,分别是UTF-7, UTF-8, UTF-16, UTF-32
    4. 其中UTF-32是完整的Unicode编码,但由于太浪费存储空间了,因此互网联领域基本上没人用,仅用于学术领域或某些特殊领域。

    此Unicode非彼Unicode

    1. 通常意义上,我们所指的Unicode需要结合语义的上下文来进行判断,基本上有2种情况。
      1. 情况1:是指"统一码",即说明的是"一种标准"。 例如:“请问你在Coding的过程中是否使用Unicode?”
      2. 情况2:专指UTF-16。 例如:“C#的CLR虚拟机中,所有的string都是Unicode编码”
    2. 在C#编程中,查看Encoding中的编码格式,发现没有UTF-16,只有Unicode。即 System.Text.Encoding.Unicode
    3. 在C#编程中,内存、硬编码固定采用UTF-16,这在《CLR Via C#》这本书中也有说到,即CLR虚拟机采用UTF-16
    4. 面对一个中国程序员,“请问你在Coding的过程中是否使用Unicode?” 的意思是 “请问你是否使用UTF-8?”。
    5. 因此,此Unicode非彼Unicode,一定要注意区别。

    Unicode到底是几个字节

    1. Unicode是一种标准,Unicode的编码目前只有4种规范,即UTF-7, UTF-8, UTF-16, UTF-32
    2. 其中UTF-8是1到4个字节,绝大部分中文占用3个字节,极少数中文占用4个字节
    3. UTF-16是2到4个字节,绝大部分中文占用2个字节,极少数中文占3个字节,有些外国文字占用4个字节
    4. 可以认为UTF-32是完整格式,UTF-8和UTF-16都是压缩格式,不能压缩成1个字节的,就是2个字节。不能压缩成2个字节的就是3个字节,以此类推

    Unicode和ANSI的关系

    1. 这个世界上一共有3种字符代码规则(世界级规范的),一种是ASCII,一种是ANSI,最后一种是Unicode,他们是不同的编码规则
    2. ASCII是单字节的,而ANSI是当单字节不够用时,延伸成2个字节的编码,当2个字节依然不够时延伸成3个字节的编码。因此可以认为ASCII是ANSI的子集。
    3. 不同国家和地区定义了不同ANSI标准,由此产生了GB2312、BIG5、JIS等标准。
    4. 在简体中文系统中,ANSI编码代表GB2312编码,反之亦然(即GB2312就代表ANSI)。
    5. ANSI和Unicode都是兼容ASCII码的,简单的说就是编码的值完全相等。只是Unicode会在前面补0,对齐编码格式,仅此而已。
    6. ANSI和Unicode之间的值则是不兼容的,需要一张转换表,才能使得ANSI中的编码对应Unicode中的编码。

    利用BOM头来固化Excel和WPS对配置文件的读写编码格式

    1. Unicode标准认为0xFF,0xFE是不可见字符,在任何一国的文字中都没有意义,因此可以利用它来给文件打一个标记,表示这个文件是Unicode文件
    2. 不带BOM,会让Excel或WPS执行编码识别流程(这个流程可能与各种规则相关,包括但不限于Windows注册表规则,用户配置规则,软件的扫描识别编码规则,总之在不同的电脑上识别起来不太稳定),带BOM会直接命令Excel使用对应的格式打开文件(免费版WPF依然不听话,付费版的我没有测试过)。
    3. Excel可根据下列表中的内容判断BOM头和具体的Unicode编码格式
    字符编码BOM(十六进制)
    UTF-8EF BB BF
    UTF-16(BE)大端FE FF
    UTF-16(LE)小端FF FE
    UTF-32(BE)大端00 00 FE FF
    UTF-32(LE)小端FF FE 00 00
    GB-1803084 31 95 33

    生成带BOM的文件

    1. 使用Notepad++等软件进行转换即可
    2. 转换之后可以发现文件会多出BOM头,用C#的读取所有字节可以看到BOM头

    C#的Encoding.Unicode.GetString(byte[] bytes)不会自动处理BOM头的问题

    1. Encoding.Unicode.GetString不会自动处理BOM头,但在断点调试的时候会显示为正确的字符串(非常容易引起Crash还怎么都找不出来),是因为前面的BOM头被隐藏了,特此说明。因此如果需要通过GetString函数获取到正确的字符串,请使用GetString的另一个重载函数。
    2. Encoding.Unicode.GetBytes不会自动添加BOM头,道理很简单,我们有可能会不停的写文件,每次写一点点,微软不可能每次都给我们带一个BOM头
    3. Encoding.Unicode.GetPreamble可以得到BOM头字节数组。因此,我们可以自行拼接BOM头和Encoding.Unicode.GetBytes的内容。
    4. File.ReadAllText明确传入编码格式时会处理BOM头,返回的字符串不会有问题
    5. File.WriteAllText明确传入编码格式时会处理BOM头,写入的文件不会有问题(带BOM头)
    6. File.ReadAllText和File.WriteAllText明确传入编码格式时会处理BOM头,是因为Encoding.Unicode.GetPreamble是虚函数,即不同编码的GetPreamble得到的字节数组是不一样的。当没有传入明确编码时,即Encoding等于null,则不会带BOM头。
    7. File.ReadAllBytes、File.WriteAllBytes不会处理BOM头。这很好理解,代码并不知道你读写的是什么数据,是结构体还是自定义的二进制数据,因此API不会去乱读写。

    示例程序

    1. "卡ID Hi"字符串使用UTF-8来表示共8个字节。其中"ID Hi"共5个字节,"卡"占用3个字节。
    2. 因此,使用File.WriteAllText应该是11个字节,即多了3个字节的BOM头。
    public class Program
    {
        static void Main(string[] args)
        {
                //WriteAllText(自动处理了BOM头的问题,应该等于11个字节)
                File.WriteAllText("./a.txt", "卡ID Hi", Encoding.UTF8);
    
                //Read (自动处理了BOM头的问题)
                string content = File.ReadAllText("./a.txt", Encoding.UTF8);
                if (content == "卡ID Hi") { Console.WriteLine("Yes"); }
    
                //Read Bytes
                byte[] preArr = Encoding.UTF8.GetPreamble();
                byte[] bytes = File.ReadAllBytes("./a.txt");
                content = Encoding.UTF8.GetString(bytes, preArr.Length,  bytes.Length - preArr.Length);
                if (content == "卡ID Hi") { Console.WriteLine("Yes"); }
        }
    }
    

    自动处理BOM头

    1. 编写一个Utility.File类,采用UTF-8格式。
    2. 读写都自动处理BOM头问题。
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    public static partial class Utility
    {
    	/// <summary>
    	/// 文件操作相关实用函数
    	/// </summary>
    	public static class File
    	{
    		/// <summary>
    		/// 读取文件所有文本,支持共享读取(只支持UTF8格式)
    		/// </summary>
    		/// <param name="path">要读取文件的文件路径</param>
    		/// <returns>读取到的文件内容</returns>
    		public static string ReadFileAllText(string path)
    		{
    			if (!System.IO.File.Exists(path))
    			{
    				return string.Empty;
    			}
    
    			//开辟缓存
    			FileInfo info = new FileInfo(path);
    			byte[] byArr = new byte[info.Length];
    
    			//读取全部文件内容(共享读取)
    			FileStream stream = System.IO.File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    			stream.Read(byArr, 0, byArr.Length);
    			stream.Close();
    
    			//去BOM头,转为String
    			string str = ReadTextRegular(byArr);
    
    			return str;
    		}
    
    		/// <summary>
    		/// 读取文件所有内容,支持共享读取
    		/// </summary>
    		/// <param name="path">要读取文件的文件路径</param>
    		/// <returns>读取到的文件内容</returns>
    		public static byte[] ReadFileAllBytes(string path)
    		{
    			if (!System.IO.File.Exists(path))
    			{
    				throw new Exception("File Not Found");
    			}
    
    			//开辟缓存
    			FileInfo info = new FileInfo(path);
    			byte[] byArr = new byte[info.Length];
    
    			//读取全部文件内容(共享读取)
    			FileStream stream = System.IO.File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    			stream.Read(byArr, 0, byArr.Length);
    			stream.Close();
    
    			return byArr;
    		}
    
    		/// <summary>
    		/// 将内容写入文件,默认采用UTF8-BOM模式
    		/// </summary>
    		/// <param name="path">文件路径</param>
    		/// <param name="content">文件内容</param>
    		public static void WriteAllText(string path, string content)
    		{
    			System.IO.File.WriteAllText(path, content, Encoding.UTF8);
    		}
    
    		/// <summary>
    		/// 从bytes字节数组中读取文本,会自动处理BOM头的问题
    		/// </summary>
    		/// <param name="bytes">字符数组</param>
    		/// <returns>读取到的文本</returns>
    		public static string ReadTextRegular(byte[] bytes)
    		{
    			string text = null;
    
    			//去UTF8-BOM头
    			//注意:Encoding.UTF8.GetString不会自动去掉BOM头
    			byte[] preArr = Encoding.UTF8.GetPreamble();
    			if (preArr[0] == bytes[0] && preArr[1] == bytes[1] && preArr[2] == bytes[2])
    			{
    				text = Encoding.UTF8.GetString(bytes, preArr.Length, bytes.Length - preArr.Length);
    			}
    			else
    			{
    				text = Encoding.UTF8.GetString(bytes);
    			}
    			return text;
    		}
    	}
    }
    
    
    展开全文
  • php清除BOM头

    2019-03-20 03:22:03
    bom.rar,bom.php
  • } /** * 读取流中前面的字符,看是否有bom,如果有bom,将bom头先读掉丢弃 * @param in * @return * @throws IOException */ public static InputStream getInputStream(InputStream in) throws IOException { ...

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.FileReader;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.PushbackInputStream;

    import java.util.ArrayList;

    import java.util.HashSet;

    import java.util.List;

    import java.util.Set;

    public class UtfTool

    {

    /**

    * ant 编译之后的result文件,注意要编译提示错误的文件名要在同一行

    * 可以设置命令提示窗口的缓冲区大小实现

    * @param resultFileName

    */

    public static Set getFileNamesFromCompileResult(String resultFileName)

    throws java.io.IOException

    {

    Set set = new HashSet();

    BufferedReader reader = new BufferedReader(new FileReader(

    resultFileName));

    String start = "[javac] ";

    int startLen = start.length();

    String end = ".java:";

    int endLen = end.length();

    String errMsg = "\\65279";

    while (reader.ready())

    {

    String line = reader.readLine();

    int indexStart = line.indexOf(start);

    if(line.indexOf(errMsg) == -1)

    {

    continue;

    }

    if (indexStart != -1)

    {

    int indexEnd = line.indexOf(end);

    if (indexEnd != -1)

    {

    String name = line.substring(indexStart + startLen,

    indexEnd + endLen - 1);

    set.add(name.trim());

    }

    }

    }

    return set;

    }

    /**

    * 读取流中前面的字符,看是否有bom,如果有bom,将bom头先读掉丢弃

    * @param in

    * @return

    * @throws IOException

    */

    public static InputStream getInputStream(InputStream in) throws IOException

    {

    PushbackInputStream testin = new PushbackInputStream(in);

    int ch = testin.read();

    if (ch != 0xEF)

    {

    testin.unread(ch);

    } else if ((ch = testin.read()) != 0xBB)

    {

    testin.unread(ch);

    testin.unread(0xef);

    } else if ((ch = testin.read()) != 0xBF)

    {

    throw new IOException("错误的UTF-8格式文件");

    } else

    {

    //不需要做,这里是bom头被读完了

    System.out.println("still exist bom");

    }

    return testin;

    }

    /**

    * 根据一个文件名,读取完文件,干掉bom头。

    * @param fileName

    * @throws IOException

    */

    public static void trimBom(String fileName) throws IOException

    {

    FileInputStream fin = new FileInputStream(fileName);

    //开始写临时文件

    InputStream in = getInputStream(fin);

    String tmpFileName = fileName + ".tmp";

    FileOutputStream out = new FileOutputStream(tmpFileName);

    byte b[] = new byte[4096];

    int len = 0;

    while (in.available() > 0)

    {

    len = in.read(b, 0, 4096);

    out.write(b, 0, len);

    }

    in.close();

    fin.close();

    out.close();

    //临时文件写完,开始将临时文件写回本文件。

    in = new FileInputStream(tmpFileName);

    System.out.println("[" + fileName + "]");

    out = new FileOutputStream(fileName);

    while (in.available() > 0)

    {

    len = in.read(b, 0, 4096);

    out.write(b, 0, len);

    }

    in.close();

    out.close();

    }

    /**

    * 根据ant编译错误来去除bom

    * @param resultFile

    * @throws IOException

    */

    static void trimBomByCompileResult(String resultFile) throws IOException

    {

    Set set = getFileNamesFromCompileResult(resultFile);

    for (String fName : set)

    {

    trimBom(fName);

    }

    }

    public static void main(String[] args) throws IOException

    {

    trimBomByCompileResult("c:/result3.txt");

    ///List list = getFileNamesFromCompileResult(resultFile);

    // InputStream in = new FileInputStream(

    //  "D:/cc/SSB_SRC_DEV_lijinglin2/TP_SSB/SSB_CJ203_Component/ProductCode/com/zte/ssb/component/access/implementation/dao/ImplementationDAO.java");

    // getInputStream2(in);

    // in.close();

    }

    }

    文章来源:http://stocknewbie.bokee.com/viewdiary.22061282.html

    posted on 2009-05-01 10:52 huohuo 阅读(1699) 评论(0)  编辑  收藏

    展开全文
  • java处理BOM头的XML

    2012-11-26 14:11:14
    java处理BOM头的XML,使用记事本编辑会产生BOM头,这样的XML在dom4j处理时会报异常。
  • 所以要去掉带有bom的文件。 操作步骤 1.将bom.php文件放在项目根目录 2.我用的是xampp集成环境,首先进入到/opt/lampp/bin/ 然后在bin目录下执行 ./php /opt/lampp/htdocs/项目名/bom.php 回车即可。
  • php开发自动清理bom头,防止php代码在windows界面修改了之后,在linux环境下跑不起来的问题。。。php开发自动清理bom头,防止php代码在windows界面修改了之后,在linux环境下跑不起来的问题。。。php开发自动清理bom...
  • 文件BOM头的介绍在 utf-8 编码的文件头部会含有一个BOM头,它占用三个字节,是用来标示该文件属于utf-8编码。现在已经有很多软件都可以识别bom头的,但还是有一些软件或编程语言是识别不了BOM头的,而php就属于不能...

    今天有小伙伴来请教,在php中如何去掉文件的BOM头或者php去除内容中的BOM头。正好今天是周未,也没有什么事,就写一写关于这方面的教程吧。

    文件BOM头的介绍

    在 utf-8 编码的文件头部会含有一个BOM头,它占用三个字节,是用来标示该文件属于utf-8编码。

    现在已经有很多软件都可以识别bom头的,但还是有一些软件或编程语言是识别不了BOM头的,而php就属于不能识别BOM头的编程语言。

    php 删除内容中的BOM头

    一般含有BOM头的内容都是从 utf-8 编码的文本文件中提取的,我们可以通过php对内容进行处理,来达到去掉 BOM 头的目的。

    php代码:<?php

    //定义一个删除BOM头的PHP函数

    function del_bom($contents){

    $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) {

    $rest = substr($contents, 3);

    return $rest;

    }else{

    return $contents;

    }

    }

    ?>

    函数的调用:<?php

    //从 TXT 文件读取内容

    $cont = file_get_contents('text.txt');

    // 删除内容中的 BOM 头

    echo del_bom($cont);

    ?>

    php 批量删除文件中的 BOM 头

    在使用记事本或一些其它别的编程软件编写PHP文件时,如果操作不规范很有可能会留有BOM头,如果是单个文件的情况下直接在编程软件中修改下即可,如果文件多了,就要使用批量的处理方法。下面就来说一个php批量去除文件中bom头的方法。

    php代码:<?php

    if (isset($_GET['dir'])) { //设置文件目录

    $basedir = $_GET['dir'];

    }else{

    $basedir = '.';

    }

    $auto = true; //定义是否去掉文件中的BOM头,如果为 false 则只检测是否含有 BOM 头

    checkdir($basedir);//检测目录

    function checkdir($basedir){

    if ($dh = opendir($basedir)) {

    while (($file = readdir($dh)) !== false) {

    if($file{0} == '.'){

    continue;

    }

    if($file != '.' && $file != '..'){

    if (!is_dir($basedir."/".$file)) {

    echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." 
    ";

    }else{

    $dirname = $basedir."/".$file;

    checkdir($dirname);

    }

    }

    }

    closedir($dh);

    }

    }

    //检查文件是否有BOM头,通过 全局变量 $auto 来控制是否删除文件中的BOM头

    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) {

    $rest = substr($contents, 3);

    rewrite ($filename, $rest);

    return ("BOM found, automatically removed.");

    } else {

    return ("BOM found.");

    }

    }else{

    return ("BOM Not Found.");

    }

    }

    //重写文件,以达到删除BOM头的目的

    function rewrite ($filename, $data) {

    $filenum = fopen($filename, "w");

    flock($filenum, LOCK_EX);

    fwrite($filenum, $data);

    fclose($filenum);

    }

    ?>

    展开全文
  • C#写入文件加上bom头,主要适用于utf8文件
  • 去除bom头.java

    千次阅读 2021-02-26 19:36:42
    去除bom头.javapackage com.test;import java.io.File;import java.io.IOException;import java.util.Collection;import org.apache.commons.io.DirectoryWalker;import org.apache.commons.io.FileUtils;import org...
  • 关于php中bom头的简介

    2021-03-22 20:21:51
    关于php中bom头的简介发布时间:2020-06-30...bom头是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。php不会忽略bom,所以在读取、包含或者引用这些文件时,会把bom作为该文件开头正文的一部分...
  • php如何去除bom头

    2021-03-25 09:04:35
    php去除bom头的方法是:可以通过ltrim()函数来实现。ltrim()函数可以移除字符串左侧的空白字符或其它预定义字符。具体使用方法:【$con=ltrim($con,"\XEF\XBB\XBF");】。PHP去除BOM头可以使用ltrim()函数。ltrim() ...
  • php如何去掉bom头部?

    2021-03-24 09:27:14
    php去掉bom头部的方法:首先创建一个名为【1.php】的代码示例文件;然后通过【2.php】来读取【1.php】的内容,并去除【1.php】的BOM头部;最后将修改后的内容写入【3.php】即可...2、这里以带BOM头的1.php为例。1.ph...
  • 背景:java普通的文件读取方式对于bom是无法正常识别的。使用普通的...目标:实现一种方式,可对BOM头进行捕捉和过滤解决方案有二:一、 使用apache的工具类,以BOMStream为例:该类的构造方式:BOMInp...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,867
精华内容 9,146
关键字:

BOM头