• 締切済み

textareでの改行

ホームページ上のtextareaで入力してもらった情報を取得するCGI(perl)スクリプトを書いています。流れとしては,フォーム上で入力した情報をCGIで取得→確認画面を表示→問題無ければメールフォームとして送信,となっています。 このスクリプト上で問題となっているのが,textareaでは自動的に改行処理(wrap=softと同じ?xhtmlで書いているので,wrap属性は指定していません。)するときに入力される改行コードと,入力者が意図的に入力する改行コードを判別出来ないということです。自動的に挿入される\n(0x0A)を削除しようとスクリプト上で, $text =~s/\r\n/\n/g; $text =~s/\r/\n/g; $text =~s/\n//g; と入れたところ,全ての改行コードが変換処理されてしまい,入力者が意図的に入れた改行コードまで処理されてしまいます。 スクリプト上,もしくはxhtmlと組み合わせて,自動的に挿入される改行コードだけを消去して,意図的に入力した改行コードだけを残す処理は出来ないものでしょうか? phpなどを使うと出来るようですが,ある程度perlのcgiで作成してしまったので,このままで出来ればと思っています。よろしくお願いします。

  • Perl
  • 回答数1
  • ありがとう数10

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

>$text =~s/\n//g; で全部消しているので無理はない。 確認画面を表示用データは、ここで $text =~s/\n/<br\/>/g; メール用データはそのまま http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi あてに送信してみて御覧なさい。

kici0819
質問者

お礼

早速回答頂きどうもありがとうございます。 ご指示頂いたページのを見ると,確かに正しく処理されているので,もう一度見直して見たところ,確認画面を表示する前に必須項目をチェックするためのJavaScriptの方に問題がありました。修正した後,教えて頂いた処理を入れたところ,意図した動作をするようになりました。 どうもありがとうございます。

関連するQ&A

  • CGIで改行タグを改行コードに変換ってできますか?

    CGIで改行タグを改行コードに変換ってできますか? $text =~ s/\r\n/<br>/g; $text =~ s/\r/<br>/g; $text =~ s/\n/<br>/g; で確認画面上で表示されるtextareaの文章は改行されるのですが、 届いたメールには<br>と表示されてしまって困ってます。 PHPでは変換できるみたいなのですが、perlでも出来るのでしょうか?

    • ベストアンサー
    • CGI
  • Perlでの改行コードについて

    <textarea>に入力された値をPOSTで渡し、ポスグレに書き込み、それをHTML上で表示する処理をしているのですが。 textareaで改行を入力した場合に、 DB内に改行が登録されません。 例: *textareaのwrapはsoftに設定してあります。 あいうえおかきくけこ さしすせそ と入力すると。 DBには 「あいうえおかきくけこ さしすせそ」 と登録され 表示では「あいうえおかきくけこさしすせそ」と表示されます。 ソースでみると 「あいうえおかきくけこ さしすせそ」と表示されています。 改行コードの置換がされていないのだと思い INSERT前に s/\r\n/<BR>/g; s/\r/<BR>/g; s/\n/<BR>/g; を使い置換をすると DBには何も登録されません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • textareaで改行すると、修正時、書き込んだデータがなくなります。

    CGIのカスタマイズに関する質問です。 ソードワールドRPGキャラクターシート管理CGIを使用しています。 初期の設定で<input type>と<textarea>の改行をする際は<br>を使うと言う形になっています。 その中で<textarea>の改行をエンターキーでしたいと思い、 sub htmlunquote{ my $text = shift; $$text =~ s/&lt;/</g; $$text =~ s/&gt;/>/g; の部分を sub htmlunquote{     my $text = shift; $$text1 =~ s/\r\n/<br>/g; $$text1 =~ s/\r/<br>/g; $$text1 =~ s/\n/<br>/g; と変換してみました。 すると、エンターキーで改行できるようになったのですが、修正や追記しようとすると、何故か前に書き込んだ文章が消えてしまっています。 なぜ、文章が消えてしまうのか、全く検討がつきません。FFFTPから、データを覗くと、書き込まれたデータはあるのですが……。 それとも改行をさせる方法が根本的に間違っているのでしょうか。 ご教授お願いいたします。

    • ベストアンサー
    • CGI
  • TEXTAREAの改行がうまくいきません。

    自作で掲示版を作成している、初心者です。現在作成中の掲示版にTEXTAREAに入力し、LOG上では1行目<BR>2行目といった形で改行をBRに置き換えて保存していますが、その修正としてLOGからデータをとり改行状態で表示させたいのですが、 うまく改行されない状態です。下記にLOGより読み込み。タグを\rに置き換えて いますが、TEXTAREAに表示されなく、改行表示どころではありません。 いったいどうすればよいのでしょうか?ご教示をお願いします。 <CGI文> $wkaaa1 = $IXUSERINF{Enaiyo}; データを取得 $wkaaa =~ &notag1($wkaaa1);  変換(これがおかしい?) $mesbuff .= "<TR><TD nowrap ><TEXTAREA ROW=\"10\" COLS=\"48\" NAME=\"Enaiyo\" WRAP=\"soft\">$wkaaa </TEXTAREA></TD></TR>"; <sub> sub notag1 { local($_) = @_; s/&/&amp;/g; s/"/&quot;/g; s/</&lt;/g; s/>/&gt;/g; s/&lt;br&gt;/\n/gi (これで <BR>を\n(改行)にしてるつもり return $_; }

    • ベストアンサー
    • CGI
  • 改行コードを保存できない。

    <textarea wrap="hard" name="sentence" rows="3" cols="30"></textarea> このフォームで、入力したデータは、 PostgreSQLのテーブルに保存されるように構成しました。 フィールドは、"text"型です。 いざそれを、phpでHTMLに呼び出すと、改行文字は無視されます。 実際に、データベースを開くと、その値はこのようになっていました。 "ああああ・・あああ・・・・ああ" 改行コードはどうやら、"・"2個を改行1つと扱って保存しているようでした。 phpで、・・を含む値をHTML呼び出す時、 ・・を<BR>として呼び出して、改行してしまう技はないでしょうか?

  • 表(<table>)の直前が、改行されてしまう。

    表(<table>)の直前が、改行されてしまう。 perlでコーディングしています。データベースはmdbファイルです。 <textarea>内を簡単なWebエディタに見立てて、 <textarea>内へhtmlタグなどで書き込んだデータを、 mdbのメモ型フィールに更新し、これをブラウザで表示させています。 このとき、表(<table>)を表示させるために、<textarea>内に<table><tr><td>タグを入力するのですが、mdbファイルに更新する際に、 <table> <tr> <td>   : のように、改行した状態で更新すると、書き込んだ改行分だけ、ブラウザに表示された表の直前が改行されてしまいます。 (mdbファイルに直接書き込んでも同現象となりました。) <table<tr><td>・・・ と改行せずに書き込むと、ブラウザに表示された表の直前は改行されませんでした。 なお、ブラウザに表示させる側のcgiファイルには、改行キー(¥nなど)を改行タグ(<br>)に変換させるために、   $textarea1 =~ s/\r\r/<br>/g;   $textarea1 =~ s/\r/<br>/g;   $textarea1 =~ s/\n/<br>/g; としているため、これと関係していると思われるのですが、 わたくしとしては、  ●<textarea>内で手入力した改行は、ブラウザ表示に反映させるが、  ●<tabel>・・・・</tabel>の部分は、改行して入力されていても、この改行だけは無視する、 と言った、都合のよいことをしたいのですが・・・、行き詰っております。 perlやcgiの問題ではないかも知れませんが、 どなたか、よいアドバイス、ご提案などございませんでしょうか。 ご教授いただければ、大変助かります。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 自動改行タグの挿入

    フリーの改造OKなCGIを改造していますが、上手く行きません。 <textarea name=com cols="70" rows="10" wrap="OFF"></textarea> 上記のタグで入力したテキストの末尾に、自動で改行タグを付けて $com に渡してデータ保存をしたいのですが、なかなか上手く行き ません。どの様な記述をすればよいでしょうか? ご指導宜しくお願い致します。

    • ベストアンサー
    • Perl
  • データが多いとエラーになる:改行をbrタグに変換

    フォームから受け取ったデータに改行があれば<br />に変換。 さらに<br />が2つ続いたら</p><p>に変換。 それを、テキストエリアに表示したいのですが、次のようなコードを書いたところ、 入力するデータが少ない(100文字程度)時は、問題なく処理されますが、データが多い(200~300文字程度)とエラー(Premature end of script headers:hoge.cgi)になります。 どこがいけないのか教えて下さい。 PCのスペックの問題なのでしょうか。 送り側(htmlのフォーム)の該当箇所 <textarea name="reviw" id="reviw" rows="8" cols="46"></textarea> CGIは 冒頭で 受け取ったデータの改行コードは、\nに変換し $in{$key} = $val; の形でセットしてあります。 print "Content-type: text/html\n\n"; (中略) print <<'CK13'; <tr> <td> <textarea name="tagoutput" cols="70" rows="10" onclick="this.focus();this.select()"> CK13 print '<p>'; &reviw_put; print <<'CKouttag6'; </p> </textarea> </td></tr> CKouttag6 (後略) がhtml出力部分で、 サブルーチンは sub reviw_put { $in{'reviw'} =~ s/\x0A/<br \/>/g; $in{'reviw'} =~ s/(<br \/>){2}/<\/p><p>/g; print "$in{'reviw'}"; } です。

    • ベストアンサー
    • Perl
  • perl cgiにて作成したtextareaで改行

    perl cgiにて作成したtextarea内に初期文字列を入力しておくプログラムを組んだのですが、 その初期文字列内で改行を行いたいと思い、何種類か改行を入れてみたのですが、 うまくいきません。 $testbr = "\r\n"; print $q->start_html(-title=>"123", -BGCOLOR=>'#ffffff'), (中略) q->p('<textarea name="freeans" rows="5" cols="30" value=$initText wrap="hard">あいうえお"$testbr"かきくけこ </textarea>'), (中略) $q->end_html; textarea内に あいうえお(改行) かきくけこ という表示をしたいのですが・・・

    • ベストアンサー
    • Perl
  • 改行文字保存時のゴミ

     現在、フォームからのデータ入力などに関して勉強しているのですが、<textarea>からデータを入力すると、1バイトの改行文字が、改行ごとにくっついてきます。  改行自体はされるんですが、その余計なものが付いてくるのが困っています。何かしらのスクリプトをダウンロードしたときなども、時々改行部分が半角の■に変わってまして、つまり改行されずにごっちゃになって表示されてしまいます(別の方法で置換処理できるので自分はどーでもいいんですが)。  他のパソコンから同じCGIをアップロード、実行してみると、以外にもそういった影響はありませんでした。何となく、文字コードが機種とか環境などによって違ってるせいかな、とは感じているのですが、対処法が分かりません。  スクリプトにどういった手を加えれば、これが出ないようにできるのでしょうか?どうかご教授をお願いします。

    • ベストアンサー
    • CGI