【发布时间】:2014-10-08 13:58:52
【问题描述】:
我正在用 PHP 编写一个脚本来更改 HTML 文件中的一些代码。每个文件都将逐行读取,因此每个操作都必须是每行。 我的问题是,如果是文件末尾,某些操作会丢失换行符。
为了清楚起见,我不想使用 HTML 换行符 (<br />),但我希望使用普通换行符 (\n) 在代码编辑器中获得格式更好的代码。
之前的 HTML 示例:
<body>
<div id="wrapper">
HTML 示例之后:
<body>
<div id="jobtempl"> <!-- jobtempl --><div id="wrapper">
应该如何:
<body>
<div id="jobtempl"> <!-- jobtempl -->
<div id="wrapper">
PHP 代码:
private function replaceContent($file) {
$this->file = $file;
$lines = file($this->file);
// some stuff to get $bodyStartLine as line number where to add the code
$handle = fopen($this->file, 'w');
foreach ($lines as $line) {
if ($i == $bodyStartLine) {
$line = $line . '<div id="jobtempl"> <!-- jobtempl -->';
}
if ($i == $bodyEndLine) {
$line = '</div> <!-- /jobtempl -->' . PHP_EOL . $line; // works
}
fwrite($handle, $line);
}
fclose($handle);
}
即使我使用$line = $line . '<div id="jobtempl"> <!-- jobtempl -->' . "\n"; 强制换行符,它也不起作用。 \r\n\ 和 \r 也是如此。
当我稍后关闭这个新 div 时有效:
$line = '</div> <!-- /jobtempl -->' . "\n" . $line;
因此,只要在换行符之后添加某些内容,它就会起作用。是否可以在换行符后不添加新内容的情况下使其正常工作?
【问题讨论】:
-
我通常会尝试使用 PHP_EOL 在这里我们有一个很好的链接来查看stackoverflow.com/questions/128560/…
-
PHP_EOL 仅说明运行 php 的操作系统,即它将使用 \n 用于 unix 或 \r\n 用于 windows,\r 用于 mac 我认为我们需要您的代码的完整摘录在这里提供帮助。
-
以这种方式使用它甚至都不起作用:
$line = $line . '<div id="jobtempl"> <!-- jobtempl -->' . PHP_EOL; -
您的其余代码正在进行哪些转换?听起来还有其他东西影响新线路。您是否检查过新行何时从
$line字符串中消失——例如通过在foreach循环的末尾回显它? -
我添加了更多代码。除了行计数器之外没有其他转换来获得添加 div 的正确位置。