编辑时,PHP文件中添加了随机间距

时间:2014-12-11 14:42:29

标签: php

我不确定这是什么时候开始的,但是到目前为止,我所有的PHP文件都遇到了一个相当恼人的问题,即在每一行的末尾都添加了一个空白区域。有点烦人,但并不完全不可能与周围一起工作。但是,我也注意到,当受到这个问题困扰的代码被复制并粘贴到其他地方时,这些无害的空间是新的空白行,这是一个相当大的问题。

我注意到打开受折磨的文件,并使用UTF-8重新保存它们没有BOM似乎可以解决问题,直到文件关闭并稍后重新打开。我通过一个将文件更改为无BOM的程序运行我的所有文件,但它似乎没有任何影响。

我想知道这是我使用的编辑器(UltraEdit),计算机/本地服务器上的文件设置,ftp程序(FileZilla)的问题,甚至是Web服务器的问题。

2 个答案:

答案 0 :(得分:2)

问题的根源是使用FTP在Windows系统(您的工作站)和Linux系统(您的Web服务器)之间进行传输。对于文本文件,在以两种方式传输文件时,应使用FTP程序的ASCII(或文本)模式(而不是“二进制”模式)。 使用二进制模式传输它也没问题。产生问题的原因是它们的混合。

Windows使用两个字符(CR和LF)来标记文本文件中行的结尾。 Linux(以及OSX和其他Unix-es)仅为此目的使用LF。 FTP程序的text / ascii传输模式在传输时进行适当的转换。二进制模式不会改变它传输的文件。

这就是:在Windows上创建文件。它的线以CR LF结束。您使用二进制模式在Linux上传输它。 CR字符不会被删除。它们在网页上不可见,但是某些Linux程序显示它们(如^ M)。它们就在每一行的末尾。您可能修改了网络服务器上的脚本,以快速修复您将页面置于实时页面时发现的问题,然后将文件传回,但这次使用文本传输模式。或者也许朋友/同事在自己的Windows计算机上复制文件,他们使用不同的FTP程序,其设置与您的不同。由于文本模式,在每个NL字符之前,FTP程序插入一个新的CR字符。这使得行以CR CR LF结尾。某些Windows程序将第一个CR字符显示为空格。其他人认为它是一个新线(即使它只是新线的“一半”)。

它与UTF-8 BOM无关。顺便说一句,UTF-8 BOM完全没用。

我无法分辨UltraEdit,但Notepad++PSPad和其他Windows编辑器在其状态栏中检测并显示他们编辑的文件中新行的类型(Windows或Linux)。它们还允许用户将新行的类型从一个系统更改为另一个系统。

解决方案非常简单:修复新行后,将FTP客户端配置为使用PHP文件(和其他文本文件)的文本传输模式。同时教你的同事如何设置他们的程序来做同样的事情。

答案 1 :(得分:0)

文件编辑器出现问题。

Downlaod Notepad ++并将字符设置为UTF-8,不含BOM并保存。

编辑:

将文件权限设置为只读。