PHP输出的新行在文本文件中

时间:2012-10-16 05:51:42

标签: php forms text-files output

我将输出保存在文本文件中的PHP表单将结果粘贴到一个字符串中,如:

Name1Email1The Message1Name2Email2The Message2Name3Email3The Message3Name4Email4The Message4

但我需要空格和/或换行符。我通常不使用PHP,所以我不明白。我没有在网上找到答案,也在这里读了一些Q / A,但这对我没有帮助。

表格:

<form action="mailer.php?savedata=1" method="post">
Your Name: <input type="text" name="name"><br>
Your Email: <input type="text" name="email"><br>
Your Message:<br> <textarea name="message" rows="5" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>

PHP

<?php
$savedata = $_REQUEST['savedata'];
if ($savedata == 1){ 
$data = $_POST['name'];
$data .= $_POST['email'];
$data .= $_POST['message'];
$file = "YOURDATAFILE.txt"; 

$fp = fopen($file, "a") or die("Couldn't open $file for writing!");
fwrite($fp, $data) or die("Couldn't write values to file!"); 

fclose($fp); 
echo "Your Form has been Submitted!";

}
?>

8 个答案:

答案 0 :(得分:17)

正如其他答案所述,您需要在每个字段后添加行尾字符。

不同的操作系统使用不同的行结尾,因此“\ n”可能不会在Windows上显示为新行。正如Mahdi所说,你可以使用Windows风格的“\ r \ n”行结尾,或者你可以使用PHP_EOL常量,以便输出适合于服务器的行结尾,在这种情况下你的代码看起来像< / p>

$data = $_POST['name'] . PHP_EOL;
$data .= $_POST['email'] . PHP_EOL;
$data .= $_POST['message'] . PHP_EOL;

答案 1 :(得分:3)

您可以使用“\ n”来编写新行。

$data = $_POST['name'] . "\n";
$data .= $_POST['email'] . "\n";
$data .= $_POST['message'] . "\n";

正如旁注,\ n必须是双引号。当用单引号包围时,它将无效。

答案 2 :(得分:3)

当您连接输入值时,您将没有任何换行符;您可以使用文字"\n""\r\n"添加它们。要将它们全部串在一起,您可以使用连接运算符或使用sprintf(),如下所示:

$data = sprintf("%s\n%s\n%s\n", $_POST['name'], $_POST['email'], $_POST['messge']);
$file = "YOURDATAFILE.txt"; 
file_put_contents($file, $data, FILE_APPEND);

我还使用file_put_contents()FILE_APPEND标志将数据附加到文件中并保存更多代码行。

答案 3 :(得分:2)

我通常将New LineCarriage Return合并:

$data = $_POST['name'] . "\r\n";

答案 4 :(得分:1)

检查用于清除表单输入的过滤器。可能是从表单输入中删除了0x0a NewLine字符。

我从'textarea'标记中保存了文本,这是正确的。 使用HEX查看器,我看到“ textarea”字段中的每个换行符都转换为十六进制字符0a。 (小数点后10位)Wikipedia将此列为UTF-8“换行符”或“ LF”。 LF是老式电传打字机的代名词。 https://en.wikipedia.org/wiki/UTF-8

所以,线 测试 测试 测试 转换为“ 4 65 73 74 0d 0a 74 65 73 74 0d 0a 74 65 73 74” 请注意字符串中的两个“ 0a”字符,它们等效于\ n。

起初这并不明显,因为我用来清除输入的正则表达式将0a字符替换为一个空格。

答案 5 :(得分:0)

$data变量需要已经包含\n个换行符。

答案 6 :(得分:0)

这对我有用:

echo "$data"."\r\n"; 

答案 7 :(得分:-1)

当我们尝试通过Web表单提取在线提交的数据并将其写入放置在Web服务器上的文本文件时 - 不会覆盖已包含在所述文本文件中的信息,那么我们使用标签中的以下代码:

<html>
<body>
<form action="" method="">
<input value="submit">
<div>Name: <input value=""></div>
<div>email: <input value=""></div>
...           ...         ...
<div><button>Submit</button></div>
</form>
</body>
</html>

以上HTML代码与以下PHP代码相结合:

<?php
$fileName = 'fdata.txt';
$fp = fopen('fdata.txt', 'a');
 $savestring = $_POST['name'] . ',' . $_POST['email'] ;
fwrite($fp, $savestring);              
fclose($fp);
?>

但是上面两个代码一起导致在文本文件中附加和串起的数据 - 也就是说,从后续Web表单中提取的每个新记录(数据集)都不会从新行开始(没有换行符或回车符。)

我在网上搜索了上述问题的解决方案 - 正如网上建议的那样,我添加了“\ r \ n”(双引号)并且还使用了'PHP_EOL'(不带引号),如下所示:

$fp = fopen('fdata.txt', 'a', "\r\n");
$savestring =  “\r\n” . PHP_EOL .  ' ' . $_POST['name'] . ',' . $_POST['email'] . 
PHP_EOL;

然而根本没有换行符(我的网络服务器和我的桌面使用Windows)。这意味着在世界上数百万网络用户的知识范围内,没有切实可行的解决方案。看来参数'a'会覆盖“\ r \ n”,“PHP_EOL”等。