web-dev-qa-db-ja.com

PHPテキストファイルで出力)の改行

出力をテキストファイルに保存する私のphpフォームは、結果を次のような1つの文字列に接着します。

Name1Email1The Message1Name2Email2The Message2Name3Email3The Message3Name4Email4The Message4

しかし、スペースや改行が必要です。私は通常PHPを使用しないので、わかりません。Webで回答が見つかりませんでした。また、ここでいくつかの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!";

}
?>
10
Darth Severus

他の回答が述べているように、各フィールドの後に行末文字を追加する必要があります。

ただし、OSが異なれば使用する行末も異なるため、たとえばWindowsでは「\ n」が改行として表示されない場合があります。 Mahdiが言ったように、Windowsスタイルの「\ r\n」行末を使用するか、 PHP_EOL 定数を使用して、サーバーに適した行末が出力されるようにすることができます。この場合、コードは次のようになります。のように見える

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

「\ n」を使用して新しい行を書き込むことができます。

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

補足として、\ nは二重引用符で囲む必要があります。一重引用符で囲むと機能しません。

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()と_FILE_APPEND_フラグを使用して、データをファイルに追加し、さらに数行のコードを保存します。

3
Ja͢ck

私は通常、New LineCarriage Returnを組み合わせます。

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

フォーム入力のクリーンアップに使用しているフィルターを確認してください。フォーム入力から0x0aの改行文字が削除されている可能性があります。

'textarea'タグからテキストを保存しましたが、正しいです。 HEXビューアを使用すると、「textarea」フィールドの各改行が16進文字0aに変換されることがわかります。 (10進数の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 7374」に変換されます。文字列内の2つの「0a」文字に注意してください。これは\ nに相当します。

入力をクリーンアップするために使用していた正規表現が0a文字をスペースに置き換えていたため、これは最初は明らかではありませんでした。

1
Greg Adams

$data変数には、すでに\n改行文字が含まれている必要があります。

これは私のために働きます:

echo "$data"."\r\n"; 
0
May Noppadol