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的。

  • 相关阅读:
    golang 多个worker正常关闭的示例
    golang调试工具Delve
    Golang & GitLab-CI 详细实例步骤
    [git] 能在关键时刻救命的git指令
    高效实时数据排行榜实现
    [Golang] 编译程序时打上git提交信息标记
    [Golang] 开源一个帧同步服务器
    Golang etcd服务注册与发现
    Golang pprof详解
    shell 递归枚举文件并操作
  • 原文地址:https://www.cnblogs.com/imvkmark/p/2291522.html
Copyright © 2011-2022 走看看