因为使用php回车,所以避免使用csv中的新行

时间:2014-01-28 12:31:03

标签: php csv

在PHP中完成我的几个第一步,我陷入困境。整个下午都在搜索,但无法提出解决方案。非常感谢经验丰富的开发者的任何建议。

情境: 要求用户填写由两个textareas组成的简短调查。点击提交按钮后,textareas的内容将写入csv文件。

问题: 我的问题是(当它确实写内容时)每当人们在textarea中使用回车时,它会在csv文件中产生一个新行,从而弄乱它。我花了整个下午阅读stackoverflow并尝试使用str_replace();用空格“”重写所有\ n,唉无济于事。

这是我的 HTML

<!DOCTYPE html> 
<html>
<head>
<title>Survey name here</title>
<meta charset='utf-8'>
</head>

<body>
<?php
if(!empty($errorMessage)) 
{
echo("<p>Error!</p>\n");
echo("<ul>" . $errorMessage . "</ul>\n");
} 
?>

<div id="content">
<h1>Survey</h1>

<form action="post.php" method="post" id="survey">

<p><strong>Question 1:</strong><br />Do you like it or not?</p>
<p><textarea rows="6" cols="100" name="question1" value="<?=$answer;?>"><?php echo $answer ?></textarea></p>

<p><strong>Question 2:</strong><br />Would you prefer this or that?</p>
<p><textarea rows="6" cols="100" name="question2" value="<?=$answer2;?>"><?php echo $answer2 ?></textarea></p>

<input type="submit" name="formSubmit" value="Submit" id="submit" onclick="return Validate()"/>
</form>
</div><!-- End Content -->

</body>
</html>

这是 PHP 部分:

<?php
if($_POST['formSubmit'] == "Submit")
{
$answer1 = $_POST['question1'];
$answer2 = $_POST['question2'];

// report error when not answered
$errorMessage = "";
if(empty($_POST['question1']))
{
$errorMessage .= "<li class='errormsg'>Please answer the question No. 1!</li>";
}
if(empty($_POST['question2']))
{
$errorMessage .= "<li class='errormsg'>Please answer the question No. 2!</li>";
}

// sending to CSV
if(empty($errorMessage)) 
{
str_replace('\r\n', ' ', $answer1 . $answer2);
$fs = fopen("test.csv","a");
fwrite($fs,$answer1 . ";" . $answer2 . "\n");
fclose($fs);

// after submit, head to thank you page 
header("Location: thankyou.php");
exit;
}
}
?>

我想我没有正确应用str_replace()函数。谁能帮帮我?

2 个答案:

答案 0 :(得分:1)

使用fputcsv代替fwrite。

if(empty($errorMessage)) 
{
    $fs = fopen("test.csv","a");
    fputcsv($fs, Array($answer1, $answer2), ';');
    fclose($fs);

    // after submit, head to thank you page 
    header("Location: thankyou.php");
    exit;
}

作为旁注,"\r\n"'\r\n'在PHP中不是一回事。第一个是“回车,换行”,第二个是“反斜杠-r,反斜杠-n”

答案 1 :(得分:1)

尝试

  $string = str_replace(array("\n", "\r"), '', $string);