为什么PHP_EOL在每行的末尾写\ r \ n

时间:2014-12-27 03:28:52

标签: php xampp fwrite eol osx-yosemite

我一直在努力使用PHP换行符。我同意以下事实:PHP_EOL提供了一个平台中立的换行符(\ r,\ r \ n,\ n,基于操作系统),我们可以利用它来为我们带来好处。

我正在使用XAMPP在Mac OS(Yosemite)中进行简单的PHP文件读写。

以下是我写入文件的代码。

$handle = fopen("test.txt", "a+");

$data = "Hello World." . PHP_EOL;

fwrite($handle, $data);

文件中的输出如下:

Hello World.\r\n

注意:我用fwrite()和file_get_contents()测试过它。没有区别。

我的问题是:在使用PHP_EOL写入文件时,为什么要在行尾写入\ r \ n?

通过调用 nl2br()函数插入换行符(HTML换行符)没问题。但是,由于这个字符我的HTML输出有这个\ r \ n字符!

我一直在玩很多不同的选择,如下所示

$line = str_replace("\r\n","<br/>",$line); // Does NOT work!
$line = preg_replace('~\r?\n~','<br/>', $line); // Works as that of nl2blr()!
$line = str_replace(PHP_EOL, "<br/>",$line); // Works as that of nl2br()!

上面的选项插入HTML换行符,但没有从实际文本中删除此'\ r \ n'!

我通过手动输入几行进行测试(显然没有\ r \ n),这种读取方法完美无需任何\ r \ n。因此,我得出结论,{PHP_EOL +文件编写方法}可能是罪魁祸首!

我真的很困惑我错过了什么?

任何帮助都将受到高度赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果没有双引号,PHP不会处理特殊字符,应该按照您的预期进行替换。

$line = str_replace('\r\n',"<br/>",$line); // note '\r\n' not "\r\n"