• ベストアンサー

textarea形式のフォームで複数行入力したテキストデータを保存すると、複数行のデータができてしまう現象を回避する方法

「テキストファイルのデータを読み込み、html画面のフォームに表示させ、データを修正後、元のテキストファイルに書き戻す」というCGIを作成中です。 テキストファイルのデータの並びは決まっていて、例えば3番目のデータが「名前」4番目のデータが「住所」だったりします。 ここで、複数行の入力が必要なフィールドをが必要となり、"textarea"形式のフォームを設定したところ、複数行のインプットをすると、テキストファイルにも複数のデータができてしまいました。2行のデータをインプットすると、データも2行になってしまい、後のデータがずれてしまいます。 そこで「複数行のテキストデータを、改行マークをつけたまま、1行のデータとして保存し、読み込んでtextarea 形式のフォームに表示させるときは、改行されて表示する」という処理が実現できるよう、時間をかけて調べておりますが未だ判らない状態です。  ご存じの方がいらっしゃいましたら是非教えて頂きたく、宜しくお願いいたします。

  • CGI
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

たぶん、改行コードが処理されてないからでしょう。 googleで「Perl 改行 デコード」で調べれば、 出てくると思いますよ。 私は下のPerl検索サイトで、似たような機能の スクリプトを探して、中身を参考にしてたりします。 http://msvs.s1.xrea.com/ 私も独学なので、処理の負荷やスマートな書き方を 参考にしています。 もしからしたら、こっちかもしれないので、htmlの タグの自動改行のタイプも載せておきます。 http://www.tagindex.com/html_tag/form/textarea.html こっちはPerlではなくhtmlタグの機能ですよ。^^;

参考URL:
http://x68000.q-e-d.net/~68user/webcgi/bbs-perl-1.html
tommy-t
質問者

お礼

早速ご回答をいただき、まことに有り難うございます。 おかげさまで、長時間悩んでいた問題が、すぐに解決しとても嬉しく思っております。教えていただいたサイトは、他にも役に立ちそうな内容がたくさんあり、今後も活用したいと思います。

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

改行コードをそのままでは当然ファイルに書き込んだ時にも改行されますので#1の方の参考URLのように<br>等に置換して保存します。 textarea内に表示する時には改行コードに置換してから表示します。

tommy-t
質問者

お礼

早速ご回答をいただき、まことに有り難うございます。 <BR>に置換することで、おかげさまで、長時間悩んでいた問題が、すぐに解決しました。

関連するQ&A

  • textarea へ、改行させたいテキストデータを書き込むには?

    Perlのprint命令では、print '(1)aaaa <BR>(2)bbbb',"\n"; というように、改行させたい箇所に<BR>を挿入すれば改行させられるとおもいます。ところが、print "<textarea> xxx </textarea>" として、CGIで複数行入力領域を書いたときは、xxxのなかに挿入した<BR>はそのまま文字として表示されてしまいます。  改行させるにはどうしたらいいのでしょうか?  どなたか(ひきつづき^^;;)、御教示をいただければ幸いです。

    • ベストアンサー
    • Perl
  • フォームのtextareaにnl2brを使用すると、入力内容の改行部分に<br />が表示されてしまう。

    現在、フォームを作成しています。 セッションを利用してフォームの次のファイルにデータを受け渡しています。 問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。 フォームの流れ: start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。 mail.phpにおいて入力内容の確認及びデータ送信。 start.phpのtextarea以下: <textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea> 解説:start.phpでは、フォームの入力項目のいずれかに入力エラーがあるとその項目の入力内容の訂正を促し、入力されたデータをもう一度表示します。(<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示します。) mail.phpにおいてstart.phpのtextareaに入力されたデータを表示する部分は以下: <?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?> start.phpにおいて入力項目のいずれかにエラーがあり、<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示した場合も、また、mail.phpにおいてstart.phpのtextareaに入力されたデータを表示した場合も、<textarea name="test">内の文字列に改行があるとその部分に<br />が表示されてしまいます。 入力例: あいうえおかきくけこ たちつてと 表示例(nl2br使用): あいうえおかきくけこ<br /> たちつてと 解説:nl2brを使用した場合、<br />は挿入されてしまいますが、予定の場所で改行されて表示されます。 試しにnl2br()をコードから削除すると、以下のような表示となります。 表示例(nl2br未使用): あいうえおかきくけこたちつてと 解説:nl2brを使用しない場合、改行されません。 どのようにすれば、textareaに入力された内容の改行部分が改行だけされ<br />が表示されないようにできるでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • textareaの入力データで無駄な改行が…

    textareaでデータ入力し、perlで拾うと無駄に改行が入ってしまいます。 <textarea name="textarea_data"> a a a </textarea> これをPerlで拾って表示させると a a a と表示されてしまいます。 改行が無駄に一つ入ってしまっているのですが、考えられる原因は何でしょうか? print "$FORM{'textarea_data'}"; で表示させています。\n等は入れていません。

    • ベストアンサー
    • Perl
  • Access2000のフォームのテキストボックスで強制的に改行する方法

     フォームに表示するデータをクエリ上で結合させています。((1)・・・・(2)・・・・(3)・・・・)  フォーム上のテキストボックス1つで、    (1)・・・・    (2)・・・・    (3)・・・・ と強制的に改行をいれる、VBA等があったら教えてください。複数のテキストボックスで表示したくありません。

  • ButtonコントロールのTEXTを複数行表示するには?

    ButtonコントロールのTEXTを複数行表示したいのですが、文字を沢山書いても改行されず1行の表示になってしまいます。どうすれば複数行表示できるでしょうか?VS2005を使用しています。

  • テキスト・セレクトフォームにて何も入力されていない状態ではフォームの色を変えるためには

     Rubyを使用して掲示板のシステムを作成しています。 必須項目 <input type="text" name="textfield"><br> 任意項目 <input type="text" name="textfield2"><br> 必須項目 <input type="text" name="textfield3"><br> 必須項目 <textarea name="textarea"></textarea><br> 必須項目 <select name="select"></select> と複数のテキストフォームとセレクトフォームがあり,その一部が必須項目です。そこで必須項目と分かるようにフォームの入力部分を赤く塗り,何か文字が入力されたら(何か選ばれたら),元の白の状態にしたいと考えています。  このようなことは実際可能なので使用か。ご教授お願いします。

    • ベストアンサー
    • HTML
  • ワード2003で作成した文章をテキスト形式で保存すると

    ワード文章をテキスト形式で保存し、その後テキストファイルで開いてみたのですが、所々1行における字数が異なった状態になってしまいます(1行40字のワード文章がテキスト形式で開くと所々1行41行になっていたり、42行になっていたりという状態です)。なお、テキスト形式でも1行40字をキープするためにファイルの変換のオプションで改行の挿入を選択しています。 ワード文章をテキスト形式で保存するとこうなってしまうものなのでしょうか。 ご存知の方は回答よろしくお願いします。

  • アクセスでフォームで入力 複数列にできる?

    アクセス2000です あるフィールドに続けてデータを打ち込むためのフォーム作り中。レポートなら複数列にして印刷できるが、フォームではひとつのフィールドを繰り返し使うには縦にずらっとならびますよね。フォームを工夫して複数列に表示できたら入力しやすいのですが。もしうまい方法がありましたら教えてください。 

  • フォームに入力したデータの受け渡しについて

    左右に分かれたフレームを使用したページ作成を検討しています。 左フレーム内のフォームへ入力したテキストやチェックボックスのデータを、 右フレームに設置した1つのテキストエリアへコピーボタンで受け渡しを行う方法を探しています。 テキストボックス1行だけの受け渡しはできるのですが、 複数のテキストエリアやチェックボックスを使用した場合の受け渡し方法をご教示いただきたけますでしょうか? 左フレームとしては↓のような内容を想定しています。 <html> <form> テキスト:</br> <input type="text" name="aaa" /></br> ラジオ:</br> <input type="radio" name="bbb" value="radio1" checked="checked" /> ラジオ1 <input type="radio" name="bbb" value="radio2" /> ラジオ2</br> チェック:</br> <input type="checkbox" name="ccc" value="check1" /> チェック1 <input type="checkbox" name="ccc" value="check2" /> チェック2</br> 選択項目:</br> <select name="ddd"> <option>A</option> <option>B</option> </select></br> テキストエリア</br> <textarea name="eee" rows="2" cols="15">テキストエリア1</textarea> </br> <input type="submit" value="送信" />  <input type="reset" value="リセット" /> </form> </html> よろしくお願いいたします。

  • 複数行を含む列を含むCVSファイルをインポートし、フォームで改行を反映させて表示したい

    電子メールのデータ(日付、タイトル、本文等)をコンマ区切りのCVSファイルに出力し、それをマイクロソフトAccess2003(windowsXP環境)にインポートしました。 本文は複数行あるのでCVSファイル内では""で囲んであります。 インポート後のテーブル表示では、複数行の文字列として格納されていることを確認しております。 例えばメモ帳などにコピー&ペーストすると改行を含んだ形で元の電子メールデータの本文が正しく表示されます。 しかし、これをAccessのフォーム機能にて表示すると、複数行の文字列が一行に変換されて表示されてしまいます。 最終的にやりたいことは、メールデータをCVS形式でAccessのテーブルにインポートし、それを1メール1フォームの形式で表示し、各メールに対して自由記述あるいはチェックボックス等を使ってフラグ付けをしながら次々にページをめくるようにして読んでいきたいということです。 現在のところテーブルへのインポートまでは成功していると認識しておりますが、肝心のフォーム表示にて本文が一行化されてしまい非常にみにくくて作業効率が悪い状態でなんとかならないかと考えています。