我的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!";
}
?>
正如其他答案所述,您需要在每个字段后添加行尾字符。
但是,不同的操作系统使用不同的行结尾,因此“\ n”可能不会在Windows上显示为新行。正如Mahdi所说,您可以使用Windows样式“\ r \ n”行结尾,或者您可以使用PHP_EOL常量,以便输出适合于服务器的行结尾,在这种情况下,您的代码看起来像
$data = $_POST['name'] . PHP_EOL;
$data .= $_POST['email'] . PHP_EOL;
$data .= $_POST['message'] . PHP_EOL;
您可以使用“\ n”来编写新行。
$data = $_POST['name'] . "\n";
$data .= $_POST['email'] . "\n";
$data .= $_POST['message'] . "\n";
正如旁注,\ n必须是双引号。当用单引号包围时,它将无法工作。
当您连接输入值时,您将没有任何换行符;你可以使用文字"\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
标志将数据附加到文件并保存更多代码行。
我通常将New Line
与Carriage Return
结合起来:
$data = $_POST['name'] . "\r\n";
检查您用于清理表单输入的过滤器。它可能是从表单输入中删除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字符。
你的$data
变量需要已经有\n
新行字符。
这对我有用:
echo "$data"."\r\n";
当我们尝试通过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”等。