将数据写入文件会在行尾添加^ M.

时间:2011-01-26 12:29:28

标签: php linux vim fwrite

使用PHP我正在使用.htaccess将内容写入fwrite文件,这一切都正常但是当我在Vim中查看.htaccess之后它会在结尾处显示^ M已添加的每一行。这似乎没有引起任何问题,但我不确定是否会发生这种情况以及是否可以预防?

这是PHP:

    $replaceWith = "#SO redirect_301\n".trim($_POST['redirect_301'])."\n#EO redirect_301";
    $filename = SITE_ROOT.'/public_html/.htaccess';
    $handle = fopen($filename,'r');
    $contents = fread($handle, filesize($filename));
    fclose($handle);
    if (preg_match('/#SO redirect_301(.*?)#EO redirect_301/si', $contents, $regs)){
    $result = $regs[0];
    }
    $newcontents = str_replace($result,$replaceWith,$contents);
    $filename = SITE_ROOT.'/public_html/.htaccess';
    $handle = fopen($filename,'w');
    if (fwrite($handle, $newcontents) === FALSE) {
    }
    fclose($handle);

当我在Vim登记后,我会看到这样的事情:

#SO redirect_301
Redirect 301 /from1 http://www.domain.com/to1^M
Redirect 301 /from2 http://www.domain.com/to2^M
Redirect 301 /from3 http://www.domain.com/to3
#EO redirect_301

服务器正在运行CentOS,我在Mac上本地工作

1 个答案:

答案 0 :(得分:3)

您的换行符为\r\n,而不是\n

在写入文件之前,您应该替换无效输入:

$input = trim($_POST['redirect_301']);
$input = preg_replace('/\r\n/', "\n", $input);    // DOS style newlines
$input = preg_replace('/\r/', "\n", $input);      // Mac newlines for nostalgia