【问题标题】:why does PHP_EOL write \r\n at the end of each line为什么 PHP_EOL 在每行末尾写 \r\n
【发布时间】:2014-12-27 03:28:52
【问题描述】:

我一直在努力处理 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 + 文件写入方法}可能是罪魁祸首!

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

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

  • 为什么有人对这个问题投了反对票?

标签: php xampp fwrite eol osx-yosemite


【解决方案1】:

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

$line = str_replace('\r\n',"&lt;br/&gt;",$line); // note '\r\n' not "\r\n"

【讨论】:

  • 谢谢。有用。不过我有一个问题。专家的建议是不要替换任何东西,而只是使用 nl2br() 本身。但是,\r\n 仍然保留在 nl2br() 中!有什么建议吗?
  • @itsraghz 我认为可能在编码或解码的某个地方,您的 EOL 字符被记录为标准文本,而不是实际的 EOL 字符(第 10 和 13 章)。如果没有看到您的所有代码,我不知道这是在哪里发生的。最安全的方法可能是这样,用实际的 EOL 字符替换 \r\n,然后像其他人建议的那样使用内置的 nl2br()$line = nl2br( str_replace( '\r\n', PHP_EOL, $line ) );
  • 谢谢。好吧,这只是一个演示/练习,我正在从一个文件中读取并粘贴了它的症结所在。让我试试你的建议,然后回来寻求任何进一步的帮助!
猜你喜欢
  • 2022-11-18
  • 2014-02-04
  • 1970-01-01
  • 2015-08-19
  • 2011-10-12
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多