1.换行、回车

\r是回车,光标到行首,(carriage return / return)

\n是换行,使光标下移一格,(line feed / newline)

对于换行这个动作,unix下一般只有一个0x0A表示换行("\n"),windows下一般都是0x0D和0x0A两个字符("\r\n"),苹果机(MAC OS系统)则采用回车符CR表示下一行(\r)。

Unix系统里,每行结尾只有“<换行>”,即\n,用LF表示下一行;

Windows系统里面,每行结尾是“<回车><换行>”,即\r\n;用回车+换行CR/LR表示下一行;

Mac系统里,每行结尾是“<回车>”,即\r,用CR表示下一行。

总结

CR用符号'\r'或'^M'表示, 十进制ASCII代码是13, 十六进制代码为0x0D;LF使用'\n'或'^J'符号表示,ASCII代码是10, 十六制为0x0A。

2.不同平台显示

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾会多车一个^M字符。

Dos和windows采用回车+换行CR/LF表示下一行,即^M(不是换行符的表示,换行符没有表示出来,$是文本结束EOF的表示)。

而UNIX/Linux采用换行符LF表示下一行,即\n。

苹果机(MAC OS系统)则采用回车符CR表示下一行,即\r。

CR用符号\r表示, 十进制ASCII代码是13, 十六进制代码为0x0D。

LF使用\n符号表示, ASCII代码是10, 十六制为0x0A,所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示,由于DOS风格的换行使用\r\n,把这样的文件上传到unix,有些版本的vi不能识别\r,所以vi显示时在行尾会出现^M出来,但是有些就能识别\r\n,正常显示回车换行。

3.传输

若在ftp中,Windows平台上换行在文本文件中是使用0d0a两个字节表示,而UNIX和苹果平台上换行则是使用0a或0d一个字节表示。

一般操作系统上的运行库会自动决定文本文件的换行格式。如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件。

在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题,特别是在编辑程序代码时。有时候代码在编辑器中显示正常,但在编辑时却会因为换行符问题而出错。

很多文本/代码编辑器带有换行符转换功能,使用这个功能可以将文本文件中的换行符在不同格式单互换。

在不同平台间使用FTP软件传送文件时,在ascii文本模式传输模式下,一些FTP客户端程序会自动对换行格式进行转换。经过这种传输的文件字节数可能会发生变化。如果你不想ftp修改原文件,可以使用bin模式(二进制模式)传输文本。

4.PHP_EOL换行符

PHP_EOL是一个预定义常量,表示当前系统所采用的换行符。不同的操作系统使用的换行符可能不同,比如 Linux 系统使用的是 \n,而 Windows 系统使用的是 \r\n。PHP_EOL 可以帮助程序在不同的操作系统上都实现正确的换行效果。可以在代码中直接使用,如:

echo "hello".PHP_EOL."world";

其功能与直接用"\r\n"、"\n" 或 "\r" 完全一样:显示换行。