我正在组合一个字符串,我将输出到.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
的支持?
答案 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
,尽管我认为媒体播放器可以识别任何类型的换行符。