質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

862閲覧

textareaで送信したデータを改行させたくない。

k130

総合スコア22

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/04/11 04:46

編集2021/05/20 05:40

test1.php

<html> <head> <meta charset="utf-8"> <title>test.php</title> </head> <body> <form action="test2.php" method="post"> <table border="1"> <tr> <td>1</td> <td><textarea name='name1' rows='12' placeholder='入力して下さい。'></textarea></td> <td>2</td> <td><textarea name='name2' rows='12' placeholder='入力して下さい。'></textarea></td> <td>3</td> <td><textarea name='name3' rows='12' placeholder='入力して下さい。'></textarea></td> <td>4</td> <td><textarea name='name4' rows='12' placeholder='入力して下さい。'></textarea></td> <td>5</td> <td><textarea name='name5' rows='12' placeholder='入力して下さい。'></textarea></td> <td>6</td> <td><textarea name='name6' rows='12' placeholder='入力して下さい。'></textarea></td> <input type="submit" value="入力"> </td> </tr> </table> </form> </body> </html> test2.php <html> <head> <meta charset="utf-8"> <title>test2.php</title> </head> <body> <?php ```php $name1 = str_replace('PHP_EOL|<br />|\r\n|\r|\n',"to",$_POST['name1']); $name2 = str_replace('PHP_EOL|<br />|\r\n|\r|\n',"to",$_POST['name2']); $name3 = $_POST['name3']; $name4 = str_replace("PHP_EOL|<br />|\r\n|\r|\n","to",$_POST['name4']); $name31 = str_replace("PHP_EOL|<br />|\r\n|\r|\n","to",$name3); $name5 = str_replace(PHP_EOL,"<br />",$text); $name6 = str_replace(["\n","\n\r","\r"],"<br />",$text); ``` print ("1.$name1<br />"); print ("2.$name2<br />"); print ("31.$name31<br />"); print ("4.$name4<br />"); print ("5.$name31<br />"); print ("6.$name4<br />"); ```php file_put_contents("logtest.txt",$name1."+".$name2."+".$name3."+".$name4. "+".$name5."+".$name6."+".PHP_EOL,FILE_APPEND) ``` ?> </body> </html> logtest.txt (各フォームに asd 123 bnm と打った結果) テキストを開いて見ると、 asd 123 asg+asd 123 asg+asd 123 asg+asd 123 asg+ asd 123 bnm+asd 123 bnm+asd 123 bnm+asd 123 bnm+++ となり、改行されてしまいます、toもどこにも書かれていません。これを、 asd123asg+asd123asg+asd123asg+asd123asg+asd123bnm+asd123bnm+asd123bnm+asd123bnm とか asd123asg</br>asd123asg</br>asd123asg</br>asd123asg</br>asd123bnm・・・ とかいうふうに一行に記録させたいのですが、どうすればよいのでしょうか。 やはり設定上できないものなんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/04/11 06:22 編集

実際のコードをご提示ください。
k130

2020/04/12 04:45 編集

書きました。
m.ts10806

2020/04/11 10:57

質問は編集できますので。
k130

2020/04/12 11:28

書きました、他に何か必要でしょうか。
guest

回答1

0

改行コードを単純にstr_replaceされては。

php

1<?php 2$text = <<<EOF 3aaa 4123 546 6 7EOF; 8 9//定数 10echo str_replace(PHP_EOL,"<br />",$text); 11//または 12echo str_replace(["\n","\n\r","\r"],"<br />",$text);

ただ、データを加工して保存するということはあまり良くないことです(本来は出力時にXSS対策をするので)。
できれば保存先はテキストではなくDBにされたほうが良いでしょう(用途分からないですけど)

追記:
中々ちゃんと質問のコードが調整されないので同じこと何回も言うのもあれなので何も反応しなかったんですけど、こちらも時間ができたので、追記します。

HTML構文おかしいところがあるので、そこは直すとして(submitボタンがtdの中になってない)

html

1 <form method="post"> 2 <table border="1"> 3 <tr> 4 <td> 5 1 6 </td> 7 <td> 8 <textarea name='name1' rows='12' placeholder='入力して下さい。'></textarea> 9 </td> 10 <td> 11 2 12 </td> 13 <td> 14 <textarea name='name2' rows='12' placeholder='入力して下さい。'></textarea> 15 </td> 16 <td> 17 <input type="submit" value="入力"> 18 </td> 19 </tr> 20 </table> 21 </form>

簡略化した上記のHTMLで試してみました。
というか、何か新しい機能を試す場合、最小構成で試しましょう。
本来だとtableタグも不要かと思います。
※action属性を除きましたが、最小構成にすべく「自身」に送信するようにしました

コード全文

php

1<?php 2if($_SERVER['REQUEST_METHOD']==='POST'){ 3 var_dump($_POST); //送信内容確認 4 5 $contents = '';//コンテンツ保管用変数 6 //置換 7 $contents = 'name1 PHP_EOL:'.str_replace(PHP_EOL,"<br />",$_POST['name1']).PHP_EOL; 8 $contents .= 'name1 改行コード:'.str_replace(["\n","\n\r","\r"],"<br />",$_POST['name1']).PHP_EOL; 9 $contents .= 'name2 PHP_EOL:'.str_replace(PHP_EOL,"<br />",$_POST['name2']).PHP_EOL; 10 $contents .= 'name2 改行コード:'.str_replace(["\n","\n\r","\r"],"<br />",$_POST['name2']).PHP_EOL; 11 12 //補完 13 file_put_contents('test.txt',$contents); 14} 15?> 16<!DOCTYPE html> 17<html lang="ja"> 18<head> 19<meta charset="utf-8"> 20<title>test.php</title> 21</head> 22<body> 23 <form action="" method="post"> 24 <table border="1"> 25 <tr> 26 <td> 27 1 28 </td> 29 <td> 30 <textarea name='name1' rows='12' placeholder='入力して下さい。'></textarea> 31 </td> 32 <td> 33 2 34 </td> 35 <td> 36 <textarea name='name2' rows='12' placeholder='入力して下さい。'></textarea> 37 </td> 38 <td> 39 <input type="submit" value="入力"> 40 </td> 41 </tr> 42 </table> 43 </form> 44 45</body> 46</html>

入力(Firefox)
イメージ説明

送信後
イメージ説明

text.txtの内容

name1 PHP_EOL:asd<br />123<br />bnm name1 改行コード:asd<br /><br />123<br /><br />bnm name2 PHP_EOL:asd<br />123<br />bnm name2 改行コード:asd<br /><br />123<br /><br />bnm

私が提示した2案、いずれも変換されてます。
「改行コード」とした方は<br />が2つ入ってるので厳密には要件に添えていませんが、
「改行コードの置換」は成功しています。
ただ、PHP_EOLで十分と言うのもこれで分かると思います。

普段Firefoxを主としているのでFirefoxで先に確認しましたが、GoogleChromeでも結果は同じでした。

「toにならない」と仰っていますが、str_replace()はその名の通り指定した文字列を別の文字列に変換する機能ですので、正規表現は使えないんじゃないかなと。
それに、'PHP_EOL|<br />|\r\n|\r|\n'ダブルクォート内では\は役目を果たしませんし、PHP_EOLは定義済みの定数なのでこちらもクォートで囲った時点で「PHP_EOLという文字列」になり、その役目を果たしていません。

つまり、「置換が機能している」と言えるのはご自身のコードだと下記2点のみだと思います。

php

1 $name5 = str_replace(PHP_EOL,"<br />",$text); 2 $name6 = str_replace(["\n","\n\r","\r"],"<br />",$text);

ですがこの2点も誤りがあります。
$textという変数、どこで定義されていますか?
本来は$_POSTname5name6からそれぞれ取得しなければならないのでは?

プログラムは書いたようにしか動きませんので、「定義したものを正確に参照できているか」は確実にしましょう。
変数名も手打ちじゃなくコピペが間違いありません。
(str_replace()の結果を $name31 という名前の変数で受け取っていながら、file_put_contents() に使っている変数が $name3 という$_POSTそのままの値を受け取った変数になっているところとか)

投稿2020/04/11 04:58

編集2020/04/14 13:20
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k130

2020/04/11 09:11

ありがとうございます、コードを利用してテキストに書き込みを行うとやはり、 aaa 123 46 となってしまいます、自分は aaa</br>123</br>46 とテキストに1行で書かせたい、記録したいのですがどうすればいいのでしょうか。
m.ts10806

2020/04/11 10:59

どのようなコードになったのか提示されないと何とも言えません。 質問本文にマークダウンでコードを追記してください。
k130

2020/04/12 12:37

一応書いたのですがどうでしょう・・・。
k130

2020/04/15 10:58 編集

自分ももう一度試しにやってみたのですが、 自分ももう1度やってみたのですが、 $name1 = str_replace(["\n","\n\r","\r"],"<br />",$_POST['name1']); とすると改行確かにできました、しかしなぜか</ br>が2つつきました。 更に、PHP_EOLに変えると、改行された後</ br>がつきました。 <br>は確かいくつついても機能は同じなので気にはならないですが、なぜ2つ・・・。
m.ts10806

2020/04/13 08:15

あのできれば、投稿前にプレビュー確認してもらえたら。 はみ出しまくっていて、読みづらさが増してしまっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問