繁体   English   中英

编辑时会在PHP文件中添加随机间距

[英]Random spacing is being added in PHP files when editing

我不确定何时开始,但是最近我的所有PHP文件都遇到了一个相当烦人的问题,即在每行的末尾添加一个空格。 有点烦人,但并非完全不可能/无法使用。 但是,我还注意到,当将受此问题困扰的代码复制并粘贴到其他位置时,这些无害的空格是新的空白行,这是一个很大的问题。

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

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

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

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

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

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

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

解决方案非常简单:修复换行符后,将FTP客户端配置为对PHP文件(和其他文本文件)使用文本传输模式。 还教您的同事如何设置他们的程序来执行相同的操作。

文件编辑器出现问题。

下载记事本++并将字符设置为不带BOM的UTF-8并保存。

编辑:

将文件权限设置为只读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM