PHP使用错误的行结尾编写文件

时间:2017-09-02 19:43:37

标签: javascript php python

我有一些生成文件的javascript代码,然后需要将其保存在服务器端以供Python脚本进一步处理。

我的javascript创建了一个字符串,在该字符串中我使用'\ n'来分隔行,然后我将该字符串提供给PHP文件以保存为文本文件。

我的问题是当我在vi中打开文件时,它在每行的末尾显示^ M,这会混淆python。我已经尝试让python生成一行的子串而不是最后的^ M,但Python不会这样做。

所以当我调试时,我的javascript字符串看起来像这样:

line1
line2
line3

但保存的文件如下所示:

line1^M
line2^M
line3^M

这是我的javascript:

for(var i = 0;i < existingList.length;i++){
        console.log(existingList.options[i].value);
        saveString += existingList.options[i].value + '\n';
        }
        saveToFile(saveString);

function saveToFile(saveString){
var data = new FormData();
data.append("data" , saveString);
var xhr = new XMLHttpRequest();
xhr.open( 'post', 'savefile.php', true );
xhr.send(data);
}

这是我的PHP:

<?php
if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = "Cards.txt";

$file = fopen($fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}
?>

我尝试过转换为UTF8,我尝试过String.fromCharCode(13)而不是'\ n',我尝试删除Python中的^ M ...任何想法?

SOLUTION:

在python中我使用

lines = text_file.read().split('\r')

或:

lines = text_file.read().split('\n')

我发现如果你使用分割线,它会自动处理行尾:

lines = text_file.read().splitlines()

3 个答案:

答案 0 :(得分:1)

对新行“\ n”使用双引号而不是'\ n'

答案 1 :(得分:1)

尝试替换您的代码行:

saveString += existingList.options[i].value + '\n';

使用:

saveString += existingList.options[i].value + "\n";

OR with:

saveString += existingList.options[i].value + "\r\n";

您只能使用"\n""\r\n",因为使用单引号无效。

您可以在使用该文件之前使用php编辑文件或内容,将您不想要的内容替换为任何内容,并使用file_get_contents()和{{1保存文件},file_put_contents()这不是pyton,但您可能想尝试使用str_replace()来修复它,因为您可以在使用该文件之前进行修复..

有多种方法可以做到这一点,这是..

php示例:

str_replace()

我希望这会带你走向正确的方向

答案 2 :(得分:0)

我测试了jagb的解决方案,它们似乎都没有工作,但它让我思考python如何读取文件。我终于找到了答案:

在python中我使用

lines = text_file.read().split('\r')

或:

lines = text_file.read().split('\n')

我发现如果你使用分割线,它会自动处理行尾:

lines = text_file.read().splitlines()