今天在作一个项目时候,用include语句包含文件。在云服务器上测试正常,在虚拟主机上老是多了莫名奇妙的换行符或者空格符。问题以下:
通过排查发现问题出如今包含文件的页面编码上:被包含文件的编码是 utf-8+bom编码方式存储。将文件转化成utf-8无bom的编码格式就好;
下面这次问题排查中学习到的东西,总结以下:php
BOM是用来判断文本文件是哪种Unicode编码的标记,其自己是一个Unicode字符("\uFEFF"),位于文本文件头部。UTF-8实际上包含两种格式:UTF-8 无BOM 类型 与 UTF-8 有BOM 类型。题主恰好使用的是有bom的的类型。事实上在UTF-16 UTF-32中一样分带有BOM及无BOM两种.html
BOM其实是很是有用的前缀。可是在服务器点对点沟通解析或者网页展现中某些状况下倒是多余或者说是会带来“麻烦”的。例如会在页头增长以下所示的乱码字符:”“锘?”浏览器
1.例如咱们把几个JS文件合并成一个文件后,若是文件中间含有BOM字符,就会致使浏览器JS语法错误。服务器
2.PHP就不能识别bom头,PHP并不会忽略BOM,因此在读取、包含或者引用这些文件时,会把BOM做为该文件开头正文的一部分。根据嵌入式语言的特色,这串字符将被直接执行(显示)出来。由此形成即便页面的 top padding 设置为0,也没法让整个网页紧贴浏览器顶部,由于在html一开头有这3个字符呢!编辑器
我使用editplus编辑器进行转化,具体以下,选文档(Document)菜单——文件编码(File encoding)——批量转换编码(File encoding multiple),选中所有文件后转码,而后再所有保存。ide
1.要查清本身自己有没有echo 或者exit空格或者换行,
2.必定要保证php文件里<?php ?>标签外没有多余的回车,换行。若是是纯粹的php脚本文件,请删除脚本后面结束标记
3.这些都排查了以后,若是是utf8编码的文件,还会输出一个多余的空格回车。作xml传输时常常死在这多余的空白上面。这是因为BOM文件头形成的。另存为无BOM的文件便可。学习