UTF-8 BOM 可能导致样式错乱的解决方法_相关技巧

使用 utf-8 编码来编写网页的时候, 往往会因为 bom (Byte Order Mark) 的问题,导致网页中经常出现一些不明的空行或者乱码字符。 这些都是因为 utf-8 编码方式对于 bom 不是强制的。因此 utf-8 编码在保存文件的时候,会出现不同的处理方式。比如有的浏览器(FireFox)可以自动过滤掉所有 utf-8 bom , 有的 (IE) 只能过滤掉一次 bom (为什么是一次? 当你出现 Include 多次文件时就会碰上这个问题了)。


使用editplus或其他编辑器删除掉文件中的BOM签名,重新刷新页面,样式正常了。

在这里找到一段关于BOM的说明,也许可以帮助你理解:

在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

...

UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。

PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以这三个字符将会直接输出。如果插件的文件有这个问题,将会导致在后台页面里激活或者不激活插件后显示白屏,如果是模版文件有这个问题,将会导致这三个字符直接输出,造成页面上方有一个小空行。国外的英文插件和模版一般都是用的ASCII码的编码方式,不会有BOM,只有国内的插件和模版会由于作者的不知情造成问题。还有,大家修改模版的时候,由于输出页面使用UTF-8编码,那么修改模版的时候如果有加入中文字符的话,必须把文件转成UTF-8编码才能正常显示,这个时候如果所使用的编辑器自动加上了BOM的话,将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码。

时间: 2024-08-02 02:38:20

UTF-8 BOM 可能导致样式错乱的解决方法_相关技巧的相关文章

.net 弹出消息框后导致页面样式变乱解决方法_实用技巧

点击按钮,执行提交操作,弹出消息框后,页面的样式变乱,解决方法: 首先,确定使用的css样式正确,页面中的宽高值保持规范统一: 然后,弹出框避免使用Response.Write(),如下所示 复制代码 代码如下: Response.Write("<script language=javascript>"); Response.Write("window.alert('"); Response.Write("计划添加失败!"); Res

ghost.pif新变种导致杀毒软件0xc00000ba失败的解决方法_应用技巧

有网友咨询0xc00000ba错误的解决办法,特地从网上帮他找了一个,不知道能否解决问题 这个问题是由一个叫做ghost.pif的U盘病毒导致的 不过最新变种的病毒会查询以下注册表项的某些键值来获取相关安全软件的安装目录,在获得安装目录下生成以系统文件名"ws2_32.dll"命名的文件夹,从而使相关安全软件运行失败. Code: SOFTWARE\\rising\\Rav SOFTWARE\\Kingsoft\\AntiVirus SOFTWARE\\JiangMin SOFTWAR

asp.net在后端动态添加样式表调用的方法_实用技巧

本文实例讲述了asp.net在后端动态添加样式表调用的方法.分享给大家供大家参考.具体实现方法如下: HtmlLink CssControl = new HtmlLink(); CssControl.Href = url; CssControl.Attributes.Add("rel", "stylesheet"); CssControl.Attributes.Add("type", "text/css"); page.Hea

先装了FRAMEWORK,后装IIS导致asp.net页面无法访问的解决方法_实用技巧

ASPX页面访问需要.net的支持. 请先检查是否安装了.NET, 打开IIS,在默认网站上点右键,如果没有ASP.NET选项卡则为没有安装或没有将.NET注册到IIS中. 1.没有安装,下 载.net framework 并安装,下载时注意版本,并不一定高版本就完全兼容低版本, 2.安装了但是没有注册到IIS中,开始->运行->cmd-> C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i

asp生成带有样式的word文件方法_应用技巧

复制代码 代码如下: < % Set fso=Server.CreateObject("Scripting.FileSystemObject") str="<html><title>asp生成word文件举例</title><body><span style='color:#ff0000;font-size:36px; font-weight:bold;'>欢迎光临www.jb51.net()</span

由于mysql运行权限导致无法找到 Discuz! 论坛数据表! 的解决方法_应用技巧

无法找到 Discuz! 论坛数据表! 在5.5升级到6.0时,上传完后,运行http://*****.com/upgrade9.php 时出下下列问题: 无法找到 Discuz! 论坛数据表! 请修改 config.inc.php 当中关于数据库的设置,然后上传到论坛目录,重新开始升级 config.inc.php 这个文件我用的是以前的,应该没有问题的. 解决方法:刷新N次,就好了.真是不明白为什么. 发现了,原理mysql的权限是普通用户权限,我们可以先将权限设为系统帐户,问题就可以解决了

asp.net updatepanel 导致JS不能加载,而无法使用的解决方法_实用技巧

复制代码 代码如下: <script type="text/javascript" language="javascript">    var prm = Sys.WebForms.PageRequestManager.getInstance();    prm.add_endRequest(function () {        // re-bind your jquery events here          $(document).ready

jquery.messager.js插件导致页面抖动的解决方法

这盘文章介绍了jquery.messager.js插件导致页面抖动的解决方法,有需要的朋友可以参考一下   消息弹出时页面总是抖动或者闪一下,找了很长时间没有找到原因,今天找到,原来是html没有声明解析规范 需要加上<!DOCTYPE> 标签 复制代码 代码如下: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional

Win8系统无法关闭后台程序导致电脑卡的解决方法

  Win8系统无法关闭后台程序导致电脑卡的解决方法.在雨林木风win8系统中运行的应用程序,往往无法关闭,因为没有关闭的选项,这些应用程序一直在后台运行,导致电脑变卡,严重影响操作.那么Win8系统无法关闭后台程序怎么办呢?大家不要着急,针对此问题,小编研究整理出win8系统关闭后台程序的方法,大家不妨一起来学习下. 解决方法一: 1.在Win8中使用过应用程序后,返回传统桌面,把鼠标移动到屏幕的最左上角,此时会出现在后台运行的应用程序; 2.点击鼠标右键,选择"关闭"即可. 解决方