我将输出保存在文本文件中的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!";
}
?>
答案 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 Line
与Carriage 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”等。