php include 语句包含文件时,浏览器多出换行

今天在做一个项目时候,用include语句包含文件。在云服务器上测试正常,在虚拟主机上总是多了莫名奇妙的换行符或者空格符。问题如下:
经过排查发现问题出现在包含文件的页面编码上:被包含文件的编码是 utf-8+bom编码方式存储。将文件转化成utf-8无bom的编码格式就好;
下面此次问题排查中学习到的东西,总结如下:

1.什么是BOM?

BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部。UTF-8实际上包含两种格式:UTF-8 无BOM 类型 与 UTF-8 有BOM 类型。题主刚好使用的是有bom的的类型。事实上在UTF-16 UTF-32中同样分带有BOM及无BOM两种.

2.存在的问题?

BOM实际上是非常有用的前缀。但是在服务器点对点沟通解析或者网页展示中某些情况下却是多余或者说是会带来“麻烦”的。例如会在页头增加如下所示的乱码字符:”“锘?”

1.例如我们把几个JS文件合并成一个文件后,如果文件中间含有BOM字符,就会导致浏览器JS语法错误。

2.PHP就不能识别bom头,PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!

3文件编码转化方法

我使用editplus编辑器进行转化,具体如下,选文档(Document)菜单——文件编码(File encoding)——批量转换编码(File encoding multiple),选中全部文件后转码,然后再全部保存。

扩充-解决php输出时出现多余的空格或者换行

1.要查清自己本身有没有echo 或者exit空格或者换行,
2.一定要保证php文件里<?php ?>标签外没有多余的回车,换行。如果是纯粹的php脚本文件,请删除脚本后面结束标记
3.这些都排查了之后,如果是utf8编码的文件,还会输出一个多余的空格回车。做xml传输时经常死在这多余的空白上面。这是由于BOM文件头造成的。另存为无BOM的文件即可。

原文地址:http://blog.51cto.com/13468761/2088890

时间: 2024-10-07 13:30:10

php include 语句包含文件时,浏览器多出换行的相关文章

读TXT文件时末尾多个换行符问题

使用getline()读txt文件的时候,不注意会出现点小bug. 贴代码: #include<iostream> #include<string.h> #include<fstream> #include<sstream> using namespace std; int main() { ifstream in("aaa.txt"); string s; int i = 0; while (getline(in, s)) { cout

删除文件时没有弹出确认提示框

存在的问题: 重装Win10系统后,发现通过右键删除文件和 Ctrl + D 快捷键来删除文件时,没有像之前一样弹出确认提示框了.原本习惯了删除文件后再从确认框中点击一下确认的,突然之间删除文件后它就直接进入了回收站.于是想着怎么解决,恢复从前... 解决方案: 进入回收站中,右键选择属性,弹出回收站属性窗口 2.对于想要删除文件时弹出确认提示框的磁盘,勾选显示删除确认对话框 桌面上的文件都是在C盘 原文地址:https://www.cnblogs.com/zhiyin1209/p/121501

问题:解决上传文件IE浏览器弹出下载框bug?

控制器方法的返回值必须以String返回,再由js处理转换成json对象 $.ajaxFileUpload({ url: "/project/proj_conver_upload", // 需要链接到服务器地址 secureuri: false, fileElementId: "fileBtn", // 文件选择框的id属性 data: {}, dataType: 'json', // 服务器返回的格式,可以是json complete: function(resp

PyCharm新建.py文件时自动带出指定内容

如:给Pycharm加上头行  # coding:utf-8File—Setting—Editor--Code Style--File and Code Templates--Python Script  后面加上 # coding:utf-8 即可 新建一个py文件 原文地址:https://www.cnblogs.com/zhongyehai/p/10520448.html

ASP.NET MVC4中使用bootstrip模态框时弹不出的问题

最近发现使用在MVC中使用bootstrip的模态框时弹不出来,但单独建立一HTML文件时可以弹出,说明代码没有问题,经过多次测试发现,在MVC的cshtml文件中添加上以下语句就能正常 @{ Layout=null; } 虽然不知道为什么会这样,至少问题解决了.

PHP包含文件语句include和require的区别

include和require 的作用都是在服务器执行它之前,将php文件的内容插入到另一个php程式里. 语法是相同的(都是语言结构),区别在于处理错误方面:require会生成致命的错误,并停止执行:include只会生成警告,并且继续执行脚本程式. 原因在于:require这个语言结构通常放在 PHP 程式的最前面,php程式在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程式的一部份:include这个语言结构一般是放在流程控制的处理区段中,php程式在读到 i

PHP包含文件函数include、include_once、require、require_once区别总结

一.使用语法和简介 1.include() 语法:include(/path/to/filename)include()语句将在其被调用的位置处包含一个文件.包含一个文件与在该语句所在位置复制制定文件的数据具有相同内容的效果.使用include()时可以忽略括号. 可以根据条件来执行include()语句.在条件语句中使用include()有个怪现象,它必须包围在语句块大括号中,或者用其他语句包围符括起来. 2.include_once() 语法:include_once(filename) i

C++包含头文件时尖括号和双引号区别

原文链接:http://c.biancheng.net/cpp/biancheng/view/66.html 如果你还看一些别的C++教程,那么你可能很早就发现了,有些书上的#include命令写作#include <文件名>,但有时候又会出现#include "文件名".你会很疑惑,到底哪个是对的呢?为什么要有这两种不同的写法呢? 这两种写法都是正确的写法,但是它们却是有区别的.我们知道C++已经有一些编写好的头文件(比如标准函数库等等),它们存放在VC++的Includ

C语言包含头文件时用引号和尖括号的区别

用尖括号 #include <>:    一般用于包含标准的库头文件,编译器会去系统配置的库环境变量和者用户配置的路径去搜索,而不会在项目的当前目录去查找 用双引号 #include "":    一般用于包含用户自己编写的头文件,编译器会先在项目的当前目录查找,找不到后才会去系统配置的库环境变量和用户配置的路径去搜索 尖括号和双引号,区别不是很重要的.其实编译器搜索包含文件,是依据搜索路径环境设置,那是很灵活的.一般说推荐用尖括号,不过是减少搜索路径加快预处理速度的意思,