• ベストアンサー

テキストエリアの改行を取得したい

最近CGIを独学ではじめたのですが、複数行のテキストエリアからの文字列の取得をした場合、改行が反映されずに表示されます。 改行コードのようなものは取得されている、とちらりとどこかで見たことがあるのですが、どのように取得して改行させるかが分かりません。 すみませんが、ご存知の方がいらっしゃいましたら教えていただけないでしょうか。 このような感じで書きました。 my $cgi = CGI::new(); my $area = $cgi->param('text'); print "Content-type: text/html\n\n"; print $area;

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

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

  • ベストアンサー
  • atse
  • ベストアンサー率83% (36/43)
回答No.1

> print "Content-type: text/html\n\n"; htmlで改行する場合は、再度テキストエリアなどに表示しない場合、 <br>といったhtml用のタグを用いるのが通例です。 ですので、そのまま出力して改行を反映させるならば text/html から text/plain に変え、 print "Content-type: text/plain\n\n"; print $area; としてください。 htmlとして表示するなら、改行を<br>に置換すれば表示できるでしょう。 #全て置換する $area =~ s/\r\n|[\r\n]/<br>/g; print "Content-type: text/html\n\n"; print $area;

if-so-at
質問者

お礼

ご回答ありがとうございます。 なるほど、置き換えで改行が出来るのですか。 ありがとうございました

関連するQ&A

  • Perl の use strict に付いて

    ●HTML <html><head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>テスト5(UTF-8)</title> </head> <body> <form action="test5.cgi" method="post" > <input type="text" name="f1" value="" size="80"> <button type="submit" >送信</button> </form> </body></html> —————————————————————————————————————— ●Perl #!/usr/bin/perl #use strict; ※問題の行1 use warnings; use CGI; print "Content-type: text/html\n\n"; print "<meta charset=\"UTF-8\">\n"; # POST / GET パラメータを取得------------------------- my $q = new CGI; # パラメータ名を指定して取得する my $param1 = $q->param('name1'); my $param2 = $q->param('name2'); # FORM値の取得----------------------------------- # 全てのパラメータを取得する for my $param_name ($q->param) { print $param_name . ' = ' . $q->param($param_name) ; print "<br>\n"; ${$param_name} = $q->param($param_name); ※問題の行2 } #------------------------------------------------- print "テスト<hr>\n"; print "$f1<br>\n"; exit; —————————————————————————————————————— 【質問】 「※問題の行1」+「※問題の行2」 = エラー 「※問題の行1」のみ = 正常に動きます 「※問題の行2」のみ = 正常に動きます 「※問題の行1」の「use strict; 」と 「※問題の行2」の「${$param_name} = $q->param($param_name); 」 をどう書き換えれば、二つとも記述したまま正常に動くのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • テキストエリアに改行入りのテキストを挿入したい。

    テキストエリアに外部から取得したテキストを読み込みたいと思っています。 そのテキストを、以下のコードのように'|'を'\n'に置換します。 このようにテキストに改行(\n)が入っていると、 オブジェクトを指定してください。というスクリプトエラーが発生するようです。 やりたいことは、テキストエリアに改行つきのテキストを挿入したい。 ということです。 何か良い方法はないでしょうか。 <script language="JavaScript"> function init(){   with(document.testform){ <% String text_abc = (String)request.getAttribute("test"); text_abc = text_abc.replace('|','\n'); %> textareaAAA.value="<%=text_abc%>";   } } </script>

  • テキストエリアで改行する

    テキストエリア1の文章をテキストエリア2に追加 するときなどに、コード(テキストエリアにキーボードで 改行するのではなくて)で2,3行改行したいの ですが、どうすればよいでしょうか? setText()で文章を書くときの改行の仕方でもいいです。 教えてください!

    • ベストアンサー
    • Java
  • テキストエリア内で改行するには。

    次のスクリプトを実行すると、テキストエリア内に 01234560 と数字が表示されますが、これを 0 1 2 . というように改行も含めてテキストエリアに出力するにはどうすればよいでしょうか。 ¥nという文字を使用するのでしょうか? <html> <head> <script language="JavaScript"> <!-- var textA="" function my1() {for (i=0;i<11;i++){textA=textA+new String(i)} document.form1.text1.value=textA;} //--> </script> </head> <body> <form name="form1"> <textarea name="text1" size="10"></textarea> <input type="button" value="CLICK!" onClick="my1();"> </form> </body> </html>

  • テキストエリアの改行表示

    現在CGIの勉強を行っているのですが、 以下の点がうまくいかなくて困っています。 -----------HTML(例)------------------ 投稿名 :[ SAMPLE ] TITLE :[ SAMPLE1 ] TEXTAREA :[ aaaaaaaa _____________bbbbbbb] [投稿][リセット] -----------サブフレーム(bbs.cgi)----- 投稿名:[ SAMPLE ] TITLE :[ SAMPLE1 ] TEXTAREA :[ aaaaaaaa _____________bbbbbbb] ------------------------------------- 1.HTMLの方で投稿(サブフレーム形式) 2.BBS.CGIで処理を行う 3.TEXTAREAで改行を行って投稿した際の処理 (ここで投稿した際に別投稿として掲載されてしまいます。) *ソース #!/usr/local/bin/perl use CGI; #外部データの取得 $q = new CGI; #外部データの受取処理 $Name1 = $q->param('name'); $Name2 = $q->param('title'); $Name3 = $q->param('url'); $Name4 = $q->param('txt'); @FILE_FOR; $count=0; print "Content-type: text/html; charset=Shift_JIS \n\n"; #書き込み if($Name1 ne "" && $Name2 ne "" && $Name3 ne "" && $Name4 ne ""){ open(FH,">>log.dat"); print FH "$Name1,$Name2,$Name3,$Name4\n"; close(FH); } #読み込み if(!open(FH,"log.dat")){ print "読み込みに失敗しました。\n"; }else{ $F=0; foreach my $line (<FH>){ @FILE_FOR[$F] = $line; $F++; } } close(FH); #結果表示 if($F ne 0){ for($Y=$F;$Y > 0;$Y--){ $C = $Y; @BOX = split(/,/ ,$FILE_FOR[$Y - 1]); print "<CENTER>"; print "<HR><TABLE BORDER=2><TR><TD>No.$C</TD></TR>"; print "<TR><TD>投稿者:</TD><TD>@BOX[0]</TD></TR>"; print "<TR><TD>投稿タイトル:</TD><TD>@BOX[1]</TD></TR>"; print "<TR><TD>URL:</TD><TD><a href=@BOX[2]>@BOX[2]</a></TD></TR>"; print "<TR><TD>内容:</TD><TD><B>@BOX[3]</B></TD></TR></TABLE><HR>"; print "</CENTER>"; } }else{ print "現在は未投稿です。"; }

    • ベストアンサー
    • CGI
  • テキストエリアにテキストファイルを改行コードごと読み出すには

    ただ今勉強中のCGIを使って、テキストファイルの編集・上書き保存をテキストエリアから行いたいのですが、テキストエリアに読み込む時に改行コードが読み込めないためか、最後の一行しか表示できません。どのようにすると、改行コードを含めて編集できるのでしょうか? その「できないコード(サブルーチン)」は↓になります。 $commentfile = "comment.txt"; ■ 読み出し sub read_commentfile { local($masg); open(IN, $commentfile); while (<IN>) {$masg = join('',$_);        $massage = $masg; } close(IN); } ■ コメントの編集画面 sub comment { local($html); &read_commentfile; #HTML作成 $html = << "EOM"; <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=$charset"> <title>コメントの編集</title> </head> <body> <form action="$self" method=post> <input type=hidden name=mode value="savecomment"> <hr> コメント<br> <textarea name=masg cols=40 rows=4>$massage</textarea> <br> <input type=submit value=" 更新 "> </form> <hr> </body> </html> EOM &print_html($html); } ■ 上書き保存 sub savecomment { local(@text); push(@text, "$FORM{'masg'}\n"); open(OUT, ">$commentfile"); print OUT @text; close(OUT); } 本来でしたら、ファイルのロック・解除、表ダグ、パスワード等の記述もあるのですが、省いてあります。 よろしくお願い致します。

    • ベストアンサー
    • CGI
  • テキストエリア内の改行もそのままクリップボードへ

    テキストエリアをクリック→テキストエリア内の内容がコピーされる。 というページを作成しています。 <textarea cols="65" rows="6" onclick="this.select();clipboardData.setData('text',this.value);"> ○○○ ●●● △△△ 111111 222222 </textarea> この内容だと、テキストエリア内の改行が反映されず、コピーされたものを他の場所に貼り付けると、すべて横に繋がった1行の文になってしまいます。 これを、目に見えているまま、改行も含めてそのままコピーさせるには、どうすればいいですか? ちなみに、必要な情報な情報かどうかわかりませんが、同様のテキストエリアが同一ページ内に複数あります。 テキストエリアをクリックでコピーではなく、コピーボタンを押下でコピーでも構いませんが、コピーされるとテキストエリアの色が反転(?)するという動作がほしいと思っています。 説明が下手ですみません…よろしくお願いします。

  • Perl BBS 掲示板 改行処理

    改行処理について教えてください。 今まで書き込み処理で unshift @DATA, "$tm,$FORM{'name'},$FORM{'title'},$FORM{'text'}\n"; としていたのですが、これを use CGI; my $form = new CGI; my $NAME = $form->param('name'); my $TITLE = $form->param('title'); my $TEXT = $form->param('text'); unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n"); に変更しました。 すると sub loadFormdata が聞かなくなり、 改行処理他が対応しなくなってしまいました、 この場合、 loadFormdataの部分のどこを変えればよいでしょうか? |------書き込み処理------| sub printdata{ use CGI; my $form = new CGI; &loadFormdata(); open(FILE, "<$FILE"); eval{ flock(FILE, 1) }; @DATA = <FILE>; close FILE; my $tm = time; my $NAME = $form->param('name'); my $TITLE = $form->param('title'); my $TEXT = $form->param('text'); unshift(@DATA,"$tm,$NAME,$TITLE,$TEXT\n"); while(@DATA > $MAX) { pop @DATA; } open(FILE, ">$FILE") or die("error :$!"); eval{ flock(FILE, 2) }; print FILE @DATA; close FILE; } |------改行処理他------| sub loadFormdata { my ($query, $pair); if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair (split(/&/, $query)) { my $key = ("$NAME,$TITLE,$TEXT"); my ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $value =~ s/&/&amp;/g; $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\x0D\x0A\s*/<br>/g; $value =~ s/\s+/ /; $FORM{$key} = $value; } }

    • ベストアンサー
    • Perl
  • Perlの改行で、

    Perlの改行で、 print <<HTML; この場合は、ここを自由に改行出来ると思いますが、 HTML print "Content-type: text/html\n\n"; &aaa ("<p style='color:#eee'>色</p>~~~~~~~~"); &aaa ("~~~"); を使う場合、~~~の部分がとても長くなるときに、 テキスト内で改行する場合、自由に改行を入れても良いでしょうか? どうやれば良いのでしょうか?

    • ベストアンサー
    • Perl
  • Firefoxでのテキストエリアに入力した文字の改行

    Firefoxでのテキストエリアに入力した文字の改行について質問させてください。 http://oshiete1.goo.ne.jp/qa2691799.html ↑のページを参考にテキストエリアに入力したテキストがリアルタイムで確認できるページを作成しました。 IEではテキストエリア内の改行がちゃんと反映されたのですが、Firefoxではテキストエリア内の改行が反映されずに、エンターキーを押すと半角スペース?になるだけで一連の文として出力されてしまいます。 どなたかこの現象の解決策をお知りの方がいらっしゃいましたらご教授ください。 よろしくお願いします。

専門家に質問してみよう