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


Not getting newlines in output when using PHP_EOL

我正在组合一个字符串,将其输出到.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的支持吗?

PHP手册称,PHP_EOL常量自PHP 4.3.10和PHP 5.0.2 以来就可用

PHP_EOL(字符串)此平台的正确"终点"符号。从PHP 4.3.10和PHP 5.0.2开始提供-http://php.net/manual/en/reserved.constants.php

所以测试一下它是否存在:

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

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

如果没有定义,如果你想要,只需手动定义

define("PHP_EOL", "'n");

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

另一个可能的原因是,当你在浏览器中输出$srt变量时,你的输出和mime类型是在HTML中设置的,所以你把它看作一行,但如果你查看源代码,它应该跨多行。

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

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

PHP_EOL此平台的正确"线路终点"符号。

所以它在本地主机上工作,因为它的窗口并给出窗口换行

你的在线网站可能在linux上,并给出了linux换行

为了获得一致的结果,使用"'r'n"而不是PHP_EOL,尽管我认为媒体播放器将能够识别任何类型的换行符。