回答編集履歴

1

修正

2020/04/14 13:20

投稿

m.ts10806
m.ts10806

スコア80875

test CHANGED
@@ -35,3 +35,241 @@
35
35
  ただ、データを加工して保存するということはあまり良くないことです(本来は出力時にXSS対策をするので)。
36
36
 
37
37
  できれば保存先はテキストではなくDBにされたほうが良いでしょう(用途分からないですけど)
38
+
39
+
40
+
41
+ 追記:
42
+
43
+ 中々ちゃんと質問のコードが調整されないので同じこと何回も言うのもあれなので何も反応しなかったんですけど、こちらも時間ができたので、追記します。
44
+
45
+
46
+
47
+ HTML構文おかしいところがあるので、そこは直すとして(submitボタンがtdの中になってない)
48
+
49
+ ```html
50
+
51
+ <form method="post">
52
+
53
+ <table border="1">
54
+
55
+ <tr>
56
+
57
+ <td>
58
+
59
+ 1
60
+
61
+ </td>
62
+
63
+ <td>
64
+
65
+ <textarea name='name1' rows='12' placeholder='入力して下さい。'></textarea>
66
+
67
+ </td>
68
+
69
+ <td>
70
+
71
+ 2
72
+
73
+ </td>
74
+
75
+ <td>
76
+
77
+ <textarea name='name2' rows='12' placeholder='入力して下さい。'></textarea>
78
+
79
+ </td>
80
+
81
+ <td>
82
+
83
+ <input type="submit" value="入力">
84
+
85
+ </td>
86
+
87
+ </tr>
88
+
89
+ </table>
90
+
91
+ </form>
92
+
93
+ ```
94
+
95
+ 簡略化した上記のHTMLで試してみました。
96
+
97
+ というか、何か新しい機能を試す場合、最小構成で試しましょう。
98
+
99
+ 本来だとtableタグも不要かと思います。
100
+
101
+ ※action属性を除きましたが、最小構成にすべく「自身」に送信するようにしました
102
+
103
+
104
+
105
+ コード全文
106
+
107
+ ```php
108
+
109
+ <?php
110
+
111
+ if($_SERVER['REQUEST_METHOD']==='POST'){
112
+
113
+ var_dump($_POST); //送信内容確認
114
+
115
+
116
+
117
+ $contents = '';//コンテンツ保管用変数
118
+
119
+ //置換
120
+
121
+ $contents = 'name1 PHP_EOL:'.str_replace(PHP_EOL,"<br />",$_POST['name1']).PHP_EOL;
122
+
123
+ $contents .= 'name1 改行コード:'.str_replace(["\n","\n\r","\r"],"<br />",$_POST['name1']).PHP_EOL;
124
+
125
+ $contents .= 'name2 PHP_EOL:'.str_replace(PHP_EOL,"<br />",$_POST['name2']).PHP_EOL;
126
+
127
+ $contents .= 'name2 改行コード:'.str_replace(["\n","\n\r","\r"],"<br />",$_POST['name2']).PHP_EOL;
128
+
129
+
130
+
131
+ //補完
132
+
133
+ file_put_contents('test.txt',$contents);
134
+
135
+ }
136
+
137
+ ?>
138
+
139
+ <!DOCTYPE html>
140
+
141
+ <html lang="ja">
142
+
143
+ <head>
144
+
145
+ <meta charset="utf-8">
146
+
147
+ <title>test.php</title>
148
+
149
+ </head>
150
+
151
+ <body>
152
+
153
+ <form action="" method="post">
154
+
155
+ <table border="1">
156
+
157
+ <tr>
158
+
159
+ <td>
160
+
161
+ 1
162
+
163
+ </td>
164
+
165
+ <td>
166
+
167
+ <textarea name='name1' rows='12' placeholder='入力して下さい。'></textarea>
168
+
169
+ </td>
170
+
171
+ <td>
172
+
173
+ 2
174
+
175
+ </td>
176
+
177
+ <td>
178
+
179
+ <textarea name='name2' rows='12' placeholder='入力して下さい。'></textarea>
180
+
181
+ </td>
182
+
183
+ <td>
184
+
185
+ <input type="submit" value="入力">
186
+
187
+ </td>
188
+
189
+ </tr>
190
+
191
+ </table>
192
+
193
+ </form>
194
+
195
+
196
+
197
+ </body>
198
+
199
+ </html>
200
+
201
+ ```
202
+
203
+ 入力(Firefox)
204
+
205
+ ![イメージ説明](0a036073c62316a9009f1171d464fc89.png)
206
+
207
+
208
+
209
+ 送信後
210
+
211
+ ![イメージ説明](8bef3862ca7a45f63430caeb033497a6.png)
212
+
213
+
214
+
215
+ text.txtの内容
216
+
217
+ ```
218
+
219
+ name1 PHP_EOL:asd<br />123<br />bnm
220
+
221
+ name1 改行コード:asd<br /><br />123<br /><br />bnm
222
+
223
+ name2 PHP_EOL:asd<br />123<br />bnm
224
+
225
+ name2 改行コード:asd<br /><br />123<br /><br />bnm
226
+
227
+
228
+
229
+ ```
230
+
231
+
232
+
233
+ 私が提示した2案、いずれも変換されてます。
234
+
235
+ 「改行コード」とした方は<br />が2つ入ってるので厳密には要件に添えていませんが、
236
+
237
+ 「改行コードの置換」は成功しています。
238
+
239
+ ただ、PHP_EOLで十分と言うのもこれで分かると思います。
240
+
241
+
242
+
243
+ 普段Firefoxを主としているのでFirefoxで先に確認しましたが、GoogleChromeでも結果は同じでした。
244
+
245
+
246
+
247
+ 「toにならない」と仰っていますが、[str_replace()](https://www.php.net/manual/ja/function.str-replace.php)はその名の通り指定した文字列を別の文字列に変換する機能ですので、正規表現は使えないんじゃないかなと。
248
+
249
+ それに、`'PHP_EOL|<br />|\r\n|\r|\n'`ダブルクォート内では`\`は役目を果たしませんし、[PHP_EOLは定義済みの定数](https://www.php.net/manual/ja/reserved.constants.php)なのでこちらもクォートで囲った時点で「PHP_EOLという文字列」になり、その役目を果たしていません。
250
+
251
+
252
+
253
+ つまり、「置換が機能している」と言えるのはご自身のコードだと下記2点のみだと思います。
254
+
255
+ ```php
256
+
257
+ $name5 = str_replace(PHP_EOL,"<br />",$text);
258
+
259
+ $name6 = str_replace(["\n","\n\r","\r"],"<br />",$text);
260
+
261
+ ```
262
+
263
+ ですがこの2点も誤りがあります。
264
+
265
+ `$text`という変数、どこで定義されていますか?
266
+
267
+ 本来は`$_POST`で`name5`、`name6`からそれぞれ取得しなければならないのでは?
268
+
269
+
270
+
271
+ プログラムは書いたようにしか動きませんので、「定義したものを正確に参照できているか」は確実にしましょう。
272
+
273
+ 変数名も手打ちじゃなくコピペが間違いありません。
274
+
275
+ (str_replace()の結果を $name31 という名前の変数で受け取っていながら、file_put_contents() に使っている変数が $name3 という$_POSTそのままの値を受け取った変数になっているところとか)