`
bill.m.lion
  • 浏览: 10874 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

utf-8的bom问题及解决方案(转贴)

    博客分类:
  • php
阅读更多

问题症状 :含有 bom uft-8文件在 ie中源代码中会生成 ?

EditPlus通过设置可完美解决开发中因为 utf-8编码引起的 bom问题

另附上扫描指定目录下含有 bom utf-8文件并删除的代码

 

 

UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可 以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带 BOM。可是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过 Firefox1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。
PHP在设计时就没有考虑BOM的问题,也就是说他不 会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以这三个字符将会直 接输出。如果插件的文件有这个问题,将会导致在后台页面里激活或者不激活插件后显示白屏,如果是模版文件有这个问题,将会导致这三个字符直接输出,造成页 面上方有一个小空行。国外的英文插件和模版一般都是用的ASCII码的编码方式,不会有BOM,只有国内的插件和模版会由于作者的不知情造成问题。还有, 大家修改模版的时候,由于输出页面使用UTF-8编码,那么修改模版的时候如果有加入中文字符的话,必须把文件转成UTF-8编码才能正常显示,这个时候 如果所使用的编辑器自动加上了BOM的话,将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码。
在Bo-Blog的wiki 看 到,同样使用PHP的Bo-Blog也一样受到BOM的困扰。其中有提到另一个麻烦:“受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件 中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功 能全部无效。”这个应该就是Wordpress后台出现空白页面的原因了,因为任何一个被执行的文件包含了BOM,这三个字符都将被送出,导致依赖 cookies和session的功能失效。
解决的办法嘛,如果只包含英文字符(或者说ASCII编码内的字符),就把文件存成ASCII码方式 吧。用UE等编辑器的话,点文件->转换->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用 记事本打开,点另存为,选ASCII编码。如果包含中文字符的话,可以用UE的另存为功能,选择

“UTF-8 无BOM”即可。请参考下面的图片:




PHP版UTF-8文件BOM自动检测移除程序

BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。但PHP在读取文件时会把这些字符读出,从而形成了文件开头含有一些无法识别的字符的问题。

比如用UTF-8格式保存的生成图片的PHP文件,因为文件头隐藏的BOM信息也被下发,导致生成的图片数据不对,浏览器无法识别。

要检测一个UTF-8文件是否含有BOM信息,就是检测文件开头的字三个符,是否为0xEF, 0xBB, 0xBF。

 

软件

默认新建时是否包含 bom

打开含有 bom 文件默认处理

Zend Studio5.5

×

不处理,可手动删除

EditPlus2.31

×

多种设置 ,可自动删除

Dreamweaver8

×

不处理

UltraEdit13.10

不处理,另存时可选删除

分享到:
评论

相关推荐

    Java解决UTF-8的BOM问题

    为了解决这个问题,我们可以自定义读取器或者利用现有的库来处理带有BOM的UTF-8文件。这里我们参考提供的两个Java源文件`UnicodeReader.java`和`UTF8Test.java`。 `UnicodeReader.java`可能实现了一个自定义的字符...

    gb2312,utf-8,utf-8-bom等编码格式的互相转换

    UTF-8-BOM,全称是“UTF-8 Byte Order Mark”,它在UTF-8编码的文件开头添加了一个特殊的字节序列(0xEF, 0xBB, 0xBF)来标识该文件使用的是UTF-8编码。BOM主要用于帮助软件识别文件的编码,但并非所有UTF-8编码的...

    java 读取服务器上的某个文件,并解决UTF-8 BOM文件的问号问题

    这个场景中,我们面临的挑战是如何正确处理UTF-8带有BOM(Byte Order Mark)的文件,因为BOM可能会导致文件内容显示为问号或者其他乱码。下面将详细介绍如何解决这个问题。 首先,我们需要理解什么是UTF-8的BOM。...

    utf-8批量bom添加删除(BomChecker)工具

    2.解决:windows使用utf-8编码,linux使用utf-8无bom编码 3.此小工具主要针对utf-8编码文件,能够批量添加删除BOM,无识别转化ASIIC功能,添加BOM时,如果文件是utf-8(BOM),则跳过,删除亦然 4.当不选中添加...

    批量utf文件转utf8-bom

    "批量utf文件转utf8-bom"这个主题指的是将一批以UTF编码的文件转换为带有BOM(Byte Order Mark)的UTF-8编码。BOM是一个特殊的字节序列,用于标识文件的编码类型,对于UTF-8编码,BOM的字节序列为0xEF, 0xBB, 0xBF。...

    PB字符串转XML文件,解决PB12.5创建UTF-8文件BOM问题(powerbuilder 12.5)

    解决PB创建UTF-8文件带BOM问题; 2.字段串直接生成XML文件。 由于项目需要,需要字符串转为XML文件,直接用Fileopen进行EncodingUTF8编码后,发现文件实际为UTF-8 BOM编码 问度娘发现有相同问题,但解决方式是利用...

    git 修改上传文件编码为utf-8-bom

    当上传文件存在中文时,修改上传文件编码为utf-8-bom

    批量去掉UTF-8文件中BOM标示符

    标题"批量去掉UTF-8文件中BOM标示符"指的是处理这一问题的方法,即通过特定工具或代码删除UTF-8文件开头的BOM标识。这个过程通常是为了确保文件在不同的系统和环境中能够正确无误地被读取和处理。 描述中提到的博文...

    Force-UTF-8-No-BOM-.vsix

    Forcibly saves all files in UTF-8 (No BOM) encoding. ForceUTF8 的核心功能在于其智能识别并转换字符串编码的能力。即使字符串中混杂着多种编码,\ForceUTF8\Encoding::toUTF8() 都能成功将其转换为统一的UTF-8...

    IDEA支持带BOM的UTF-8编码文件的解决方案

    压缩包内包含 ecj-4.6.2.jar 和 Util.class两个文件...3 如果不生效,可能是ecj版本间存在了大的差异,可以考虑自己动手编译ecj jar包,可参考我的方案:http://www.jianshu.com/p/0f0f68066b66 ps:建议替换前进行备份

    字符编码转换类,支持 ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom互相转换

    "CharsetConv"类提供了一个工具,帮助开发者在ANSI、Unicode(Little Endian和Big Endian)、UTF-8及UTF-8+BOM之间灵活转换,从而避免编码问题带来的困扰。通过深入学习和实践,开发者可以更好地应对各种编码挑战,...

    UTF-8去BOM头工具

    "UTF-8去BOM头工具"就是为了解决这个问题而设计的。这个工具整合了之前的去BOM工具和所需的DLL(动态链接库)文件,使得用户可以方便地处理含有BOM头的UTF-8文件。DLL文件通常包含了一组可供其他程序调用的函数或...

    IDEA支持带BOM的UTF-8编码文件.rar

    理解IDEA对带BOM的UTF-8文件的支持,可以帮助开发者更高效地处理跨平台或跨系统的工作,避免因编码问题导致的不必要困扰。通过灵活地配置IDEA的编码设置,可以确保代码在各种环境中都能正常工作,同时保持良好的...

    UTF-8文件批量去除BOM标记

    UTF-8编码是一种广泛使用...批量去除BOM工具的存在,为开发者提供了一种便捷的解决方案,帮助他们处理那些因为BOM引发的问题,确保文件的兼容性和正确性。在处理大量UTF-8编码文件时,这样的工具无疑是一个得力的助手。

    PB9转换utf-8例子

    标题中的“PB9转换utf-8例子”指的是在PowerBuilder 9(PB9)环境下将数据从非UTF-8编码转换为UTF-8编码的一种解决方案。由于PB9本身不直接支持这种转换,开发者通常需要利用外部库或者特定的编程技巧来实现这个功能...

    C#写入文件加上bom头,主要适用于utf8文件

    在UTF-8编码中,BOM是一个由三个字节组成的序列:0xEF, 0xBB, 0xBF,它位于文件的开头,用来表明该文件采用的是UTF-8编码。在C#编程中,有时我们需要在写入UTF-8文件时添加这个BOM头,以确保其他程序或系统能正确...

    delphi 6-XE读取ANSI,unicode,unicode big,utf-8,utf-8BOM文件,保存utf8

    delphi 6-XE读取ANSI,unicode,unicode big,utf-8,utf-8BOM文件,保存utf8

Global site tag (gtag.js) - Google Analytics