【问题标题】:PHP string operations lose newline charactersPHP 字符串操作丢失换行符
【发布时间】: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 . '&lt;div id="jobtempl"&gt; &lt;!-- jobtempl --&gt;' . "\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 . '&lt;div id="jobtempl"&gt; &lt;!-- jobtempl --&gt;' . PHP_EOL;
  • 您的其余代码正在进行哪些转换?听起来还有其他东西影响新线路。您是否检查过新行何时从$line 字符串中消失——例如通过在foreach 循环的末尾回显它?
  • 我添加了更多代码。除了行计数器之外没有其他转换来获得添加 div 的正确位置。

标签: php html newline


【解决方案1】:

看看这个answer on SO

echo 'Hello, world!' . "\xA";

更新

我试过你的代码,它需要一些额外的换行符。使用 PHP_EOL\xA 可以正常工作。

查看此代码:http://ideone.com/ZQHTqj

【讨论】:

  • 不幸的是,它甚至不起作用:$line = $line . '&lt;div id="jobtempl"&gt; &lt;!-- jobtempl --&gt;' . "\xA";
  • 我认为你的问题不在于换行符。查看我的更新,也许您需要在适当的时候在开头或结尾添加一些额外的字符。
  • 问题是我不想添加额外的字符,因为格式错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
相关资源
最近更新 更多