我在我的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换行符时,问题就解决了。
答案 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
希望这个答案有帮助。