PHP_EOL似乎未定义

时间:2014-03-09 00:32:39

标签: php cross-platform

我在我的CakePHP应用程序中使用Linux服务器。我使用PHP 5.4.30 我需要从字符串str_replace newlines。 我想使用PHP_EOL

但是var_dump(PHP_EOL)给出了这个:

string(1) " "

获取此常量的空字符串很奇怪。我在等\n\r

这有效:

$text=str_replace("\r"," ",$text);

这不起作用:

$text=str_replace(PHP_EOL," ",$text);

(我的所有文件都是UTF8编码的)

解决方案

str_replace(PHP_EOL..)

无效,因为我从Windows服务器获取文本并在Linux服务器中处理它。所以Linux的PHP_EOL没有在文本中找到换行符。当我str_replace同时使用windows和unix换行符时,问题就解决了。

2 个答案:

答案 0 :(得分:0)

使用此:

$text = str_replace(array("\r\n", "\n\r", "\n", "\r"), ' ', $text)

无论系统托管在何处,都应涵盖所有情况。

如果所有数据都是在操作它的操作系统中构建的,那么你可以依赖PHP_EOL,否则最好使用特定的换行符。

答案 1 :(得分:0)

您可以使用PHP_EOL来使跨系统脚本在更多系统上工作...但是,即使有用的时候,您仍可以使用最新的php引擎找到这个不变的,未定义的现代主机,但没有这个问题,但我认为此脚本顶部的代码将节省您的时间:

<?php
  if (!defined('PHP_EOL')) {
    if (strtoupper(substr(PHP_OS,0,3) == 'WIN')) {
      define('PHP_EOL',"\r\n");
    } elseif (strtoupper(substr(PHP_OS,0,3) == 'MAC')) {
      define('PHP_EOL',"\r");
    } elseif (strtoupper(substr(PHP_OS,0,3) == 'DAR')) {
      define('PHP_EOL',"\n");
    } else {
      define('PHP_EOL',"\n");
    }
  }
?>

因此,您可以毫无问题地使用PHP_EOL ...显然,PHP_EOL应该用于应该在更多等效于\ n或\ r或\ r \ n ...的系统上运行的脚本上。

有关PHP_EOL的说明:

1) on Unix    LN    == \n
2) on Mac     CR    == \r
3) on Windows CR+LN == \r\n

希望这个答案有帮助。