使用PHP_EOL时未在输出中获取换行符

时间:2012-07-17 23:16:41

标签: php

我正在组合一个字符串,我将输出到.srt文件:

while ($row = mysql_fetch_array($res)) {
    $srt = $srt . $row['line_number'] . PHP_EOL; 
    $srt = $srt . str_replace(".", ",", $row['start']) . " --> " . str_replace(".", ",", $row['end']) .PHP_EOL ;    
    $srt = $srt . br2nl($row['text']) . PHP_EOL; 
    $srt = $srt . PHP_EOL;  
}

但似乎PHP_EOL无效,因为我的输出是:

100:00:02,107 --> 00:00:05,810you sure

并且没有任何换行符。我想让我的输出成为:

1
00:00:02,107 --> 00:00:05,810
you sure

后面跟换行。

在我的计算机上通过localhost进行测试时,它可以正常工作。我的主机上的PHP版本是否可能缺少对PHP_EOL的支持?

2 个答案:

答案 0 :(得分:8)

PHP手册说PHP_EOL常量自PHP 4.3.10和PHP 5.0.2起可用

  

PHP_EOL(string)       此平台的正确“行尾”符号。从PHP 4.3.10和PHP 5.0.2开始 - http://php.net/manual/en/reserved.constants.php

所以测试它是否存在:

var_dump(PHP_EOL); // should output: string(1) " "

OR

var_dump(defined("PHP_EOL")); // should output if exists: bool(true) 

如果没有定义,只需手动定义

即可
define("PHP_EOL", "\n");

或者只使用echo "\n"echo "\r\n"

另一个可能的原因是当您在浏览器中输出$srt变量时,您的输出和mime类型是以HTML格式设置的,因此您将其视为一行,但如果您查看源,则应该跨越它跨越多行。

为了确保文本输出,如果你想保留html,你可以回显<pre>标签,或者在php文件的顶部添加这一行以强制文本输出:

header('Content-Type: text/plain', true);

答案 1 :(得分:0)

  

PHP_EOL此平台的正确“行尾”符号。

因此它适用于本地主机,因为它的窗口并提供了一个Windows换行符

你的在线网站可能在linux上并提供了一个linux换行符

要获得一致的结果,请使用"\r\n"代替PHP_EOL,尽管我认为媒体播放器可以识别任何类型的换行符。