zoukankan      html  css  js  c++  java
  • PHP使用模版QuickSkin出现空白行的解决办法[BOM]

    前几天想组织网站使用模版系统以便整体规划页面,使页面和php代码相分离。于是模版选了以前看o-blog时候shirui使用的smarttemplete(现在版本为QuickSkin V5.0),当页面组织过后,凡是使用过QuickSkin的模版页面,顶部都出现了一个空行,在chrome浏览器下为一个标记点号。

    我想当然的就以为是模版的bug,于是更换大型模版,使用smarty,结果smarty也是出现了相同的问题,今天用‘php smarty 空行’作为关键字搜索,看到一个相关的文章PHP Smarty 输出空行。他问题解决了,找到的问题的解决办法“utf的bom头签名”。

    现将文件部分内容摘抄至此:

    BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。

    文件以UTF-8编码保存时,有两种情情况:带Unicode签名(BOM)和不带Unicode签名
    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM——Byte Order Mark)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。

    对于一般的文件,这样并不会产生什么麻烦。但对于 PHP来说,PHP在设计时就没有考虑BOM的问题,不会忽略UTF-8编码的文件开头BOM的那三个字符,会把BOM作为该文件开头正文的一部分。 由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个 空行或是一个乱码。由于在html一开头有这3个字符的存在,即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部。由于受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在 COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。

    解决办法:

        在编辑、更改任何文本文件时,请务必使用不会乱加BOM的编辑器。Linux下的编辑器应该都没有这个问题。WINDOWS下,请勿使用记事本等编辑器。 推荐的编辑器是:Editplus 2.12版本以上;EmEditor;UltraEdit(需要取消‘添加BOM’的相关选项);Dreamweaver(需要取消‘添加BOM’的相关 选项)等。对于已经添加了BOM的文件,要取消的话,可以用以上编辑器另存一次。(Editplus需要先另存为gb,再另存为UTF-8。)

    ultraedit, editplus, notepad四个工具对UTF-8 的支持不相同,下面是对四个工具对UTF-8 支持的总结:
    UTF-8 BOM header: 是三个字符: EF BB BF。
      1. notepad
    notepad 在保存时,选择UTF-8 格式,会在文件头写上BOM header.
      2. editplus
    文件保存时,选择UTF-8 格式,不会在文件头写上 BOM header.
      3. ultraedit
    ultraedit 对UTF-8 的支持最为完备。在advanced->configuration中可以    选择文件保存时是否写上BOM header.
      4. vi
    指的是Linux 下的vim, 如果UTF-8 文件开头有BOM header, 其能够正常显示UTF-8编码,否则,显示为乱码。
      还有一些编码转换工具,比如,可以用java 写一个简单的编码转换工具,这些工具是不会增加BOM header的。

  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/imvkmark/p/2291522.html
Copyright © 2011-2022 走看看