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

问题描述 投票:9回答:8

我的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!";

}
?>
php forms text-files output
8个回答
17
投票

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

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

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

3
投票

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

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

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


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标志将数据附加到文件并保存更多代码行。


2
投票

我通常将New LineCarriage Return结合起来:

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

1
投票

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

我从'textarea'标签保存了文本,这是正确的。使用HEX查看器,我看到“textarea”字段中的每个换行符都被转换为十六进制字符0a。 (十进制10)维基百科将其列为UTF-8“换行符”或“LF”。从旧电传日起,LF是Line Feed的缩写。 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字符。


0
投票

你的$data变量需要已经有\n新行字符。


0
投票

这对我有用:

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

-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”等。

© www.soinside.com 2019 - 2024. All rights reserved.