8

我正在整理一个字符串,我将输出到 .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

4

2 回答 2

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) " "

或者

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

如果未定义,请根据需要手动定义

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

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

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

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

header('Content-Type: text/plain', true);
于 2012-07-17T23:32:02.897 回答
1

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

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

您的在线网站可能在 linux 上并给出了 linux 换行符

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

于 2012-07-17T23:33:36.580 回答