PHPでフォームに入力されたテキストを1行づつ処理させたい場合は、str_replace()
とexplode()
関数を組み合わせると便利です
サンプルプログラム
下記のプログラムは、GETパラメータで渡されたテキストを改行文字で区切って、1行づつ処理するサンプルです。
<?php
// input.php
// フォームから入力されたテキストを改行で区切って、配列に入れる
$text = str_replace(['\r\n', '\r'], PHP_EOL, $_GET['form_text']);
$lines = explode(PHP_EOL, $text);
// 配列に入れられたテキストを1行づつ処理する
foreach( $lines as $line ) {
echo "[{$line}]" . PHP_EOL;
}
フォームから渡されてくるテキストは改行コードがCR+LF(\r\n)やLF(\r)の可能性があるので、はじめにstr_replace()で改行コードを統一しています。その後explode()で改行コードを基準にテキストを配列に変換しています。
プログラムの途中で出てくるPHP_EOLは、phpで改行コードを意味する定数です。
(上記のコードではmethod=GETで処理が呼ばれることを想定しています。POSTで処理したい場合は$_GETを$_POSTに変更してください)
動作確認用のプログラム
上記の動作を確認するには、PHPのビルトインWebサーバを使うと便利です。
まずは、同じフォルダに以下の内容でindex.htmlを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
<form action="input.php" method="GET">
<textarea name="form_text" rows="5" cols="80"></textarea> <br />
<button>送信</button>
</form>
</body>
</html>
次に、ファイルがあるディレクトリで下記のコマンドを実行し、ビルトインWebサーバを起動します。
php -S localhost:8080
起動後に、ブラウザからhttp://8080/index.html
にアクセスすると、先ほど作成したindex.htmlが表示されます。
複数行のテキストを入力して"送信"ボタンをクリックします。
今回のサンプルでは、遷移先のページで右クリックしてソースの表示を行うと結果を確認できます。
こちらもおススメ