gpt4 book ai didi

php - 将数据写入文件在行尾添加 ^M

转载 作者:太空狗 更新时间:2023-10-29 12:07:32 26 4
gpt4 key购买 nike

使用 PHP,我正在使用 fwrite 将内容写入 .htaccess 文件,这一切工作正常,但是当我查看 .htaccess 时之后在 Vim 中,它会在添加的每一行的末尾显示 ^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 上本地工作

最佳答案

您的换行符作为 \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

关于php - 将数据写入文件在行尾添加 ^M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4804546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com