13

我将输出保存在文本文件中的 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!";

}
?>
4

8 回答 8

20

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

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

$data = $_POST['name'] . PHP_EOL;
$data .= $_POST['email'] . PHP_EOL;
$data .= $_POST['message'] . PHP_EOL;
于 2012-10-16T06:14:06.597 回答
6

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

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

就像旁注一样, \n 必须用双引号引起来。当被单引号包围时,它将不起作用。

于 2012-10-16T05:54:01.640 回答
4

当您像这样连接输入值时,您将没有任何换行符;您可以使用文字"\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()with FILE_APPENDflag 将数据附加到文件并保存更多代码行。

于 2012-10-16T06:14:15.663 回答
2

我通常New Line结合Carriage Return

$data = $_POST['name'] . "\r\n";
于 2012-10-16T06:09:31.717 回答
1

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

我从“textarea”标签中保存了文本,这是正确的。使用 HEX 查看器,我看到“textarea”字段中的每个换行符都被转换为十六进制字符 0a。(十进制 10)维基百科将此列为 UTF-8“换行符”或“LF”。LF 是旧电传时代的 Line Feed 的缩写。 https://en.wikipedia.org/wiki/UTF-8

因此,行 test test test 转换为“4 65 73 74 0d 0a 74 65 73 74 0d 0a 74 65 73 74” 注意字符串中的两个“0a”字符,相当于\n。

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

于 2019-04-21T00:27:51.207 回答
0

$data您的变量需要已经包含换行符\n

于 2012-10-16T05:54:38.467 回答
0

这对我有用:

echo "$data"."\r\n"; 
于 2018-04-06T06:33:23.543 回答
-1

当我们尝试提取通过 Web-Form 在线提交的数据并将其写入放置在 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-Forms中提取的每条新记录(数据集)都不是从新行开始的(有没有换行符或回车符)。

我在网上搜索了上述问题的解决方案——按照网上的建议,我添加了“\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”等。

于 2013-05-18T13:18:53.370 回答